当前位置: 首页 > news >正文

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{//小罐茶工厂@Overridepublic Tea createTea() {return new UsuallyTea();}
}// 具体工厂:主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
public class XiaoGuanTeaFactory implements TeaFactory{//小罐茶工厂@Overridepublic 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

http://www.lryc.cn/news/403210.html

相关文章:

  • IOT 的 10 种常见协议、组网模式、特点及其使用场景浅析
  • 【Android】 dp与sp,加冕为王
  • R语言画散点图-饼图-折线图-柱状图-箱线图-直方图-曲线图-热力图-雷达图
  • 影响转化率的多元因素分析及定制开发AI智能名片S2B2C商城系统小程序的应用案例
  • 数据仓库中事实表设计的关键步骤解析
  • .net6 core Worker Service项目,使用Exchange Web Services (EWS) 分页获取电子邮件收件箱列表,邮件信息字段
  • 通过 EMR Serverless Spark 提交 PySpark 流任务
  • 【Linux网络】epoll实现的echo服务器{nocopy类/智能指针/echo服务器}
  • [数据集][目标检测]拐杖检测数据集VOC+YOLO格式2778张1类别
  • 长按加速- 解决react - setInterval下无法更新问题
  • 路网双线合并单线——ArcGIS 解决方法
  • 【.NET全栈】ASP.NET开发Web应用——ADO.NET数据访问技术
  • 【机器学习】无监督学习和自监督学习
  • 蓝牙新篇章:WebKit的Web Bluetooth API深度解析
  • 2024可信数据库发展大会:TDengine CEO 陶建辉谈“做难而正确的事情”
  • Guns v7.3.0:基于 Vue3、Antdv 和 TypeScript 打造的开箱即用型前端框架
  • 掌握构建艺术:在Gradle中配置自定义的源代码管理(SCM)
  • 如何在 Mac 上下载安装植物大战僵尸杂交版? 最新版本 2.2 详细安装运行教程问题详解
  • ​前端Vue组件技术实践:打造自定义精美悬浮菜单按钮组件
  • 数据仓库的一致性维度
  • 【ffmpeg命令】RTMP推流
  • 人工智能大模型发展的新形势及其省思
  • Linux云计算 |【第一阶段】SERVICES-DAY4
  • 微信小程序 button样式设置为图片的方法
  • 2024 HNCTF PWN(hide_flag Rand_file_dockerfile Appetizers TTOCrv_)
  • 《昇思25天学习打卡营第25天|第14天》
  • Easysearch、Elasticsearch、Amazon OpenSearch 快照兼容对比
  • 数据分析入门指南:数据库入门(五)
  • Logback日志异步打印接入指南,输出自定义业务数据
  • 将iPad 作为Windows电脑副屏的几种方法(二)