3.设计模式--创建者模式--工厂模式

3.设计模式–创建者模式–工厂模式

3.1简单工厂和静态 工厂(不属于23中设计模式)

//抽象类:定义了产品的规范,描述了产品的主要特性和功能
public interface Tea {

    public abstract void setName();

    public abstract String getName();


}

//具体产品:实现或者继承抽象产品的子类
public class XiaoGuanTea implements Tea {

    private String name;

    public void setName() {
        this.name = "小罐茶";
    }

    public String getName() {
        return this.name;
    }
}



// 具体类:实现或者继承抽象产品的子类
public class UsuallyTea implements Tea {

    private String name;

    public void setName() {
        this.name = "普通茶";
    }

    public String getName() {
        return this.name;
    }
}


// 具体工厂 :提供了创建产品的方法,调用者通过该方法来获取产品。
public class TeaCompany {

    public static void createTea(String name){//如果加了一个static就是静态工厂,没加就是普通工厂
        Tea	tea = null;
        if("小罐茶".equals(name)){
            tea =  new XiaoGuanTea();
        }else{
            tea = new UsuallyTea();
        }
        tea.setName();
        System.out.println(tea.getName());
    }

    public static void main(String[] args) {
        createTea("小罐茶");
        createTea("aaa");
    }
}

优缺点:

优点:

封装了创建对象的过程,可以通过参数直接获取对象。把对象的创建和业务逻辑层分开,这样以后就避免了修改客户代码,如果要实现新产品直接修改工厂类,而不需要在原代码中修改,这样就降低了客户代码修改的可能性,更加容易扩展。

缺点:

增加新产品时还是需要修改工厂类的代码,违背了“开闭原则”。

3.2工厂方法 (只考虑生产同等级的产品(同抽象类的产品,抽象类只有一个))

//抽象产品:定义了产品的规范,描述了产品的主要特性和功能
public interface Tea {

    public abstract String getName();
    
}

// 具体产品:实现或者继承抽象产品的子类
public class UsuallyTea implements Tea {

    private String name;

    public UsuallyTea(){
        this.name="普通茶";
    }

    public String getName() {
        return this.name;
    }
}

//具体产品:实现或者继承抽象产品的子类
public class XiaoGuanTea implements Tea {

    private String name;

    public XiaoGuanTea(){
        this.name="小罐茶";
    }

    public String getName() {
        return this.name;
    }
}

// 抽象工厂:供了创建产品的接口,调用者通过它访问具体工厂的工厂方法来创建产品。
public interface TeaFactory {
    Tea createTea(); //创建茶的接口
}

// 具体工厂:主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
public class UsuallyTeaFactory implements TeaFactory{

    //小罐茶工厂
    @Override
    public Tea createTea() {
        return new UsuallyTea();
    }
}

// 具体工厂:主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
public class XiaoGuanTeaFactory implements TeaFactory{

    //小罐茶工厂
    @Override
    public Tea createTea() {
        return new XiaoGuanTea();
    }
}

// 店:根据具体的工厂生产茶
public class TeaStore {


    private TeaFactory factory;

    //茶工厂放到店里面,合作
    public TeaStore(TeaFactory factory) {
        this.factory = factory;
    }


    public void orderTea(){
        //点茶
        Tea tea = factory.createTea();
        String name = tea.getName();
        System.out.println(name);
    }


    public static void main(String[] args) {
        //客人来点茶
        TeaStore teaStore = new TeaStore(new XiaoGuanTeaFactory());//小罐茶
        teaStore.orderTea();
        TeaStore tea = new TeaStore(new UsuallyTeaFactory());//普通茶
        tea.orderTea();
    }
}

工厂方法模式是简单工厂模式的进一步抽象。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。

优缺点

优点:

  • 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;
  • 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则;

缺点:

  • 每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。

3.3 抽象工厂

可以查看 https://www.runoob.com/design-pattern/abstract-factory-pattern.html

相关推荐

  1. 3.设计模式--创建者模式--工厂模式

    2024-07-20 12:02:04       16 阅读
  2. 设计模式(3):工厂模式

    2024-07-20 12:02:04       32 阅读
  3. GO设计模式——3、抽象工厂模式创建型)

    2024-07-20 12:02:04       54 阅读
  4. 设计模式工厂模式

    2024-07-20 12:02:04       63 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 12:02:04       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 12:02:04       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 12:02:04       45 阅读
  4. Python语言-面向对象

    2024-07-20 12:02:04       55 阅读

热门阅读

  1. npm下载的依赖包版本号怎么看

    2024-07-20 12:02:04       16 阅读
  2. 【AI工具基础】—Kylin(一)

    2024-07-20 12:02:04       17 阅读
  3. Unity3D 如何读取策划给定的Excel表格详解

    2024-07-20 12:02:04       19 阅读
  4. PHP学习笔记③

    2024-07-20 12:02:04       14 阅读
  5. YOLO 各版本对比

    2024-07-20 12:02:04       18 阅读
  6. 基于gunicorn+flask+docker模型 高并发部署

    2024-07-20 12:02:04       17 阅读
  7. 跟着GPT学设计模式之模板模式

    2024-07-20 12:02:04       18 阅读
  8. 动态美学:WebKit中CSS转换与动画的魔力

    2024-07-20 12:02:04       17 阅读
  9. 华为AI认证必刷题100道(上)

    2024-07-20 12:02:04       19 阅读
  10. 概率论中的卷积公式

    2024-07-20 12:02:04       13 阅读