【学习设计模式】简单工厂、工厂模式、抽象工厂模式

抽象工厂模式的优点

抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理。

抽象工厂模式的缺点

产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的

工厂设计模式适用范围:
当需要创建的对象是一系列相互关联或相互依赖的产品族时,便可以使用抽象工厂模式

比较简单直接上代码:

定义三个接口和其实现类,解释在注释中

/**
 * @author Jay
 * @date 2020/7/15 15:29
 * @Description:
 */
public interface Product {
}

/**
 * @author Jay
 * @date 2020/7/15 15:45
 * @Description:
 */
public interface Gift {
}
/**
 * @author Jay
 * @date 2020/7/15 15:32
 * @Description:
 * 工厂模式:
 * 中心思想:把工厂抽象化,有多少产品建多少工厂。满足开闭原则
 * 抽象工厂模式:工厂模式的基础上,一个工厂多人使用,但是一个工厂最好是生产隶属于某族的产品比如说A族。
 * 当A族产品只有Product时,抽象工厂退化为工厂模式
 */
public interface Factory {
    public Product createProduct();
    public  Gift createGift();
}

/**
 * @author Jay
 * @date 2020/7/15 15:24
 * @Description:
 */
public class ProductA implements Product {
    public ProductA(){
        System.out.println("生产产品A");
    }
}

/**
 * @author Jay
 * @date 2020/7/15 15:25
 * @Description:
 */
public class ProductB implements Product{
    public ProductB(){
        System.out.println("生产产品B");
    }
}

/**
 * @author Jay
 * @date 2020/7/15 15:46
 * @Description:
 */
public class GiftA implements Gift{
    public GiftA(){
        System.out.println("礼物A");
    }
}
/**
 * @author Jay
 * @date 2020/7/15 15:46
 * @Description:
 */
public class GiftB implements Gift {
    public GiftB(){
        System.out.println("礼物");
    }
}

/**
 * @author Jay
 * @date 2020/7/15 15:25
 * @Description:
 * 中心思想:只抽象产品,工厂只有一个,每生产新产品都需要在改写工厂的代码。不满足开闭原则。
 */
public class EasyFactory {
    public static Product create(String str){
        if (str.equals("ProductA"))
            return new ProductA();
        if (str.equals("ProductB"))
            return new ProductB();

        return null;
    }
}
/**
 * @author Jay
 * @date 2020/7/15 15:32
 * @Description:
 */
public class FactoryA implements Factory {
    @Override
    public Product createProduct() {
        return new ProductA();
    }

    @Override
    public Gift createGift() {
        return new GiftA();
    }
}

/**
 * @author Jay
 * @date 2020/7/15 15:32
 * @Description:
 */
public class FactoryB implements Factory {
    @Override
    public Product createProduct() {
        return new ProductB();
    }

    @Override
    public Gift createGift() {
        return new GiftB();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值