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

设计模式二(工厂模式)

本质:实例化对象不用new,用工厂代替,实现了创建者和调用者分离

满足:

开闭原则:对拓展开放,对修改关闭

依赖倒置原则:要针对接口编程

迪米特原则:最少了解原则,只与自己直接相关的类有关系

简单工厂模式

也被称为静态工厂

public interface Car {void name();
}
public class BWM implements Car{
​@Overridepublic void name() {System.out.println("宝马");}
}
public class DaZhong implements Car{
​@Overridepublic void name() {System.out.println("大众");}
}

public class CarFactory{public static Car getCar(String name){if(name.equals("大众")){return new DaZhong();}else if (name.equals("宝马")){return new BWM();}else{return null;}}
}
public class consumer {public static void main(String[] args) {
​Car car = CarFactory.getCar("大众");car.name();Car car2 = CarFactory.getCar("宝马");car2.name();}
}

总结

将创建对象的任务交给工厂去完成

缺点

不满足开闭原则,如果我们新创建一个车,就需要修改CarFactory的源代码

工厂方法模式

多个工厂对应多个实现类

public interface CarFactory {
​Car getCar();
}
​public class BMWFactory implements CarFactory{@Overridepublic Car getCar() {return new BWM();}
}
​
public class DaZhongFactory implements CarFactory{@Overridepublic Car getCar() {return new DaZhong();}
}

如果我们想要创建新的车对象,只要创建对应的车工厂即可,无需修改CarFactory的代码

public class Aodi implements Car {@Overridepublic void name() {System.out.println("奥迪");}
}public class AodiFactory implements CarFactory{@Overridepublic Car getCar() {return new Aodi();}
}public class consumer {public static void main(String[] args) {Car car = new DaZhongFactory().getCar();car.name();Car car1 = new BMWFactory().getCar();car1.name();Car car2 = new AodiFactory().getCar();car2.name();}
}

抽象工厂模式

围绕一个超级工厂生产工厂,该工厂又称为其他工厂的工厂 (抽象的抽象)

public interface IProductFactory {IPhoneProduct iphoneproduct();IRouterProduct irouterproduct();
}

具体的产品工厂

public class XiaomiFactory implements IProductFactory{@Overridepublic IPhoneProduct iphoneproduct() {return new XiaomiPhone();}@Overridepublic IRouterProduct irouterproduct() {return new XiaomiRouter();}
}
public class HuaweiFactory implements IProductFactory{@Overridepublic IPhoneProduct iphoneproduct() {return new HuaweiPhone();}@Overridepublic IRouterProduct irouterproduct() {return new HuaweiRouter();}
}

产品功能

public interface IPhoneProduct {void open();void close();
}
public interface IRouterProduct {void open();void close();}

具体实现

public class XiaomiPhone implements IPhoneProduct{@Overridepublic void open() {System.out.println("小米手机开机");}@Overridepublic void close() {System.out.println("小米手机关机");}
}
public class HuaweiPhone implements IPhoneProduct{@Overridepublic void open() {System.out.println("华为手机开机");}@Overridepublic void close() {System.out.println("华为手机关机");}
}
public class XiaomiRouter implements IRouterProduct{@Overridepublic void open() {System.out.println("小米路由器开机");}@Overridepublic void close() {System.out.println("小米路由器关机");}
}
public class HuaweiRouter implements IRouterProduct{@Overridepublic void open() {System.out.println("华为路由器开机");}@Overridepublic void close() {System.out.println("华为路由器关机");}
}

测试

public class consumer {public static void main(String[] args) {//先创建工厂System.out.println("==========小米==========");IPhoneProduct product = new XiaomiFactory().iphoneproduct();product.open();product.close();IRouterProduct irouterproduct = new XiaomiFactory().irouterproduct();irouterproduct.open();irouterproduct.close();System.out.println("===========华为==========");IPhoneProduct iphoneproduct = new HuaweiFactory().iphoneproduct();iphoneproduct.open();iphoneproduct.close();IRouterProduct irouterproduct1 = new HuaweiFactory().irouterproduct();irouterproduct1.open();irouterproduct1.close();}
}

 

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

相关文章:

  • Maven应用手册
  • 笨蛋学设计模式行为型模式-状态模式【20】
  • C++从零开始的打怪升级之路(day18)
  • 浅谈安科瑞直流电表在新加坡光伏系统中的应用
  • C++参悟:数值运算相关
  • 【Web前端开发基础】CSS的定位和装饰
  • [pytorch入门] 3. torchvision中的transforms
  • WINCC读写EXCEL-VBS
  • Python os模块
  • Elasticsearch:2023 年 Lucene 领域发生了什么?
  • Java算法 leetcode简单刷题记录4
  • opencv#27模板匹配
  • 【论文阅读笔记】Swin-Unet: Unet-like Pure Transformer for Medical Image Segmentation
  • IS-IS:01 ISIS基本配置
  • 基于极限学习机的曲线分类,基于极限学习机的光谱分类,基于极限学习机的分类预测
  • miniconda安装
  • PHP判断访客是否手机端(移动端浏览器)访问的方法总结
  • vscode无法自动补全
  • 深度学习记录--指数加权平均
  • 如何生成图源二维码?
  • PowerShell install 一键部署grafana
  • 笨蛋学设计模式行为型模式-解释器模式【23】
  • SAP ABAP SUBMIT常用用法
  • GitLab备份与恢复测试(基于Docker)
  • android studio开发的一些问题
  • 辞职对于我来说,不可避免(10)
  • 【Java】--网络编程:基于TCP协议的网络通信
  • CMake+QT+大漠插件的桌面应用开发(QThread)
  • 【笔记】Helm-3 主题-9 Helm高级技术
  • YOLOv5改进 | 主干篇 | 华为GhostnetV1一种移动端的专用特征提取网络