A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hehedada 中级黑马   /  2019-8-9 14:55  /  884 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

工厂方法模式:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
个人总结: 通过对象工厂灵活地生产多种对象


public class Factory_Method {
     
    public static void main(String[] args){
        AnimalsFactory animalsFactory = new AnimalsFactory();
        //通过工厂创建一个cat对象
        Animals cat = animalsFactory.getAnimals("cat");
        //通过工厂创建一个dog对象
        Animals dog = animalsFactory.getAnimals("dog");
        cat.name();  dog.name();
    }
}

interface Animals { //动物
    void name();
}

class Cat implements Animals{ //猫
    @Override
    public void name(){
        System.out.println("this is a cat");
    }
}

class Dog implements Animals{ //狗
    @Override
    public void name(){
        System.out.println("this is a dog");
    }
}

class AnimalsFactory { //动物工厂
    public Animals getAnimals(String name){
        if(name.equalsIgnoreCase("cat"))
            return new Cat();
        else if(name.equalsIgnoreCase("dog"))
            return new Dog();
        else
            return null;
    }
}





抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
个人总结:工厂模式 >> 一种工厂,多种对象 ; 抽象工厂模式 >> 一种抽象工厂,多种工厂,每个工厂又可以生产多种对象


public class Abstract_Factory {
    //工厂生成器:生产具体的工厂
    public static AbstractFactory getFactory(String factoryName){
        if(factoryName.equalsIgnoreCase("animals"))
            return new AnimalsFactory();
        else if(factoryName.equalsIgnoreCase("others"))
            return new OthersFactory();
        else
            return null;
    }
    public static void main(String[] args){
        //生产动物工厂
        AbstractFactory animalsFactory = getFactory("animals");
        //通过动物工厂创建一个cat对象
        Animals cat = animalsFactory.getAnimals("cat");
        cat.name();
    }
}

interface Animals { //动物
    void name();
}

class Cat implements Animals{ //猫
    @Override
    public void name(){
        System.out.println("this is a cat");
    }
}

class AnimalsFactory extends AbstractFactory{ //动物工厂
    public Animals getAnimals(String name){
        if(name.equalsIgnoreCase("cat"))
            return new Cat();
        else
            return null;
    }
    @Override
    public Object getObject() {
        return null;
    }
}

class OthersFactory extends AbstractFactory{ //其他工厂
    public Object getObject() {
        return null;
    }
    @Override
    public Animals getAnimals(String name) {
        return null;
    }
}

abstract class AbstractFactory { //抽象工厂
    abstract public Animals getAnimals(String name);
    abstract public Object getObject();
}





单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
个人总结:在类内部创造单一对象,通过设置构造方法权限,使类外部无法再创造对象
复制代码
public class Singleton {
     
    public static void main(String[] agrs){
        Earth earth = Earth.getEarth();
        System.out.println(earth.getAge());
    }
}

//创建单例对象的方式有多种,下面是比较常用的一种方式;按需求选择合适方式。
class Earth {  //只允许创建一个对象的类
    //创建唯一对象
    private static Earth earth = new Earth();
    //构造函数访问权限必须private
    private Earth(){}
    //获取唯一对象
    public static Earth getEarth(){
        return earth;
    }
    private int age = 1000;
    public int getAge() {
        return age;
    }
}





建造者模式:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
个人总结:将一些不会变的基本组件,通过builder,组合,构建复杂对象,实现分离


public class BuilderDemo {

    public static void main(String[] args) {
        PriceBuilder priceBuilder = new PriceBuilder();
        System.out.println("Car1和Car2:"+priceBuilder.Car1AndCar2());
        System.out.println("Car1和Bus:"+priceBuilder.Car1AndBus());
    }
}
//基本组件
interface Car {
}
//基本组件1
class Car1 implements Car{
    int price = 20;
}
//基本组件2
class Car2 implements Car{
    int price = 90;
}
//基本组件3
class Bus {
    int price = 500;
}
class PriceBuilder {
    //car1和car2的总价格
    public int Car1AndCar2() {
        int priceOfCar1 = new Car1().price;
        int priceOfCar2 = new Car2().price;
        return priceOfCar1+priceOfCar2;
    }
    //car1和bus的总价格
    public int Car1AndBus() {
        int priceOfCar1 = new Car1().price;
        int priceOfBus = new Bus().price;
        return priceOfCar1+priceOfBus;
    }
}





原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
个人总结:将对象复制了一份并返还给调用者,对象需继承Cloneable并重写clone()方法


public class Prototype implements Cloneable{

    private String message = "hello";
     
    public Object clone() throws CloneNotSupportedException{
        Prototype proto = (Prototype) super.clone();
        //操作克隆对象
        proto.message += " world!";
        return proto;
    }
     
    public static void main(String[] args) throws CloneNotSupportedException {
        Prototype p = (Prototype)new Prototype().clone();
        //操作克隆对象
        System.out.println(p.message);
    }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马