设计模式--创建型

工厂模式是将对象的创建和使用分开,使用者只用关心使用而不需要去关心对象的创建。

简单工厂模式

  1. 通过type 来生产不同的类对象
  /**
     * 根据不同的类型来创建不同的对象
     * @param type
     * @return
     */
    public  static Snacks getSnacks (int type) {
        if (type == TYPE_CHEESE){
            return new Cheese() ;
        }else if (type == TYPE_PUDDING){
            return new Pudding();
        } 
        return null; 
    }
  1. 通过工厂方法类获取不同类的对象---避免了修改getObjectByType ()方法, 添加新的类对象获取的时候只需要新增一个获取方法即可
 /**
     * 获取奶酪
     * @return
     */
    public  static  Snacks getCheese () {
        return new Cheese();
    }

    /**
     * 获取布丁
     * @return
     */
    public static  Snacks getPudding (){
        return new Pudding() ; 
    }

工厂方法模式

工厂方法模式是简单工厂模式的升级, 它是由于简单工厂模式不符合 软件设计6大原则中的: 单一职责原则 和 开闭原则 而出现的。 它在新增类对象获取的时候只需要扩展新的Factory即可,不需要去修改已有的Factory。 它将将工厂类抽象出一个接口,对象的创建方法延迟到工厂子类去实现;是多工厂形式。
它的缺点是:构造了太多的Factory,很冗余 。 实际运用视情况而定

/**
 * @author spark on 2021/5/11
 * @description 工厂类接口
 */
interface AbstractSnacksCreateFactory {

         Snacks getSnacks ();
}
/**
 * @author spark on 2021/5/11
 * @description 奶酪类的Factory
 */
public class CheeseFactory implements  AbstractSnacksCreateFactory{
    @Override
    public Snacks getSnacks() {
        return new Cheese();
    }
}

如果后边要新增 果冻类的创建 只需要构想一个果冻类Factory 实现AbstractSnacksCreateFactory 即可。

抽象工厂模式

解决了多个工厂匹配混乱的问题
比如: 奶酪有奶酪的包装Factory, 布丁有布丁的包装Factory,如果不统一管理,可能就会出现奶酪用了布丁的包装,或者布丁用了奶酪的包装,造成混乱。
此时我们就需要 将匹配集合抽象出一个工厂集合接口

/**
 * @author spark on 2021/5/11
 * @description 包装和零食的获取 抽象出来一个接口
 */
public interface AbstractFactory {
    // 获取零食
    Snacks getSnacks ();
    // 获取零食包装
    Bag getBag ();
}

/**
 * @author spark on 2021/5/11
 * @description 获取带包装的奶酪
 */
public class CheeseWithBagFactory implements  AbstractFactory {
    private  CheeseFactory cheeseFactory = new CheeseFactory();
    private  CheeseBagFactory cheeseBagFactory = new CheeseBagFactory();

    @Override
    public Snacks getSnacks() {
        return cheeseFactory.getSnacks();
    }

    @Override
    public Bag getBag() {
        return cheeseBagFactory.getBag();
    }
}

建造者模式

使用者不用去关心对象的创建,也不要了解所有的参数,需要用到什么就用相关参数去获取对象即可。
场景: 当一个类的构造函数参数个数超过4个,并且这些参数有些是可选的参数,这个时候就可以考虑使用建造者模式。

你可能感兴趣的:(设计模式--创建型)