【学习设计模式】简单工厂、工厂模式、抽象工厂模式
程序员文章站
2024-01-21 20:27:04
...
抽象工厂模式的优点
抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理。
抽象工厂模式的缺点
产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的
工厂设计模式适用范围:
当需要创建的对象是一系列相互关联或相互依赖的产品族时,便可以使用抽象工厂模式
比较简单直接上代码:
定义三个接口和其实现类,解释在注释中
/**
* @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();
}
}
上一篇: .net core swagger安装
下一篇: 设计模式(一):工厂模式(简单工厂)