GOF23的一些总结(二)
来源:互联网 发布:阿里大数据平台 编辑:程序博客网 时间:2024/05/20 23:05
二、工厂模式 ,实现了创建者和调用者的分离。
详细分类:简单工厂模式,工厂方法模式,抽象工厂模式
面向对象的基本原则:
OCP(开闭原则):一个软件实体应当对扩展开放,对修改关闭。
DIP(依赖倒转原则):要针对接口编程,不要针对实现编程。
LOD(迪米特法则):只与你直接的朋友通信,而避免和陌生人通信。
核心作用:实例化对象,用工厂方法代替new操作。将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。
工厂模式:
简单工厂模式:用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已经有的代码)
工厂方法模式:用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂模式:用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
//简单工厂
public class CarFactory{ publics tatic Car createCar(String type){ if("奥迪".equals(type)){ return new Audi(); }else if("比亚迪".equals(type)){ return new Byd(); }else{ return null; } }}
简单工厂的另外一种实现方式
public class CarFactory{ public static Car createAudi(){ return new Audi(); } public static Car createByd(){ return new Byd(); }}
要点:简单工厂模式也叫静态工厂模式,工厂类一般使用静态方法,不修改代码的话,无法扩展。
//实现工厂方法模式(1)
public interface CarFactory{ Car createrCar();}
实现工厂方法模式(2)
public class AudiFactory implements CarFactory{ @Override public Car createCar(){ return new Audi(); }}
要点:扩展的时候更符合OCP原则,只需要添加一个实体类和添加一个新的工厂方法。
//抽象工厂模式
用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
抽象工厂模式是工厂方法模式的升级版本,存在多个业务品种,业务分类时,通过抽象工厂模式生产需要的对象是一种非常好的解决方式。
public interface Engine{ void run(); void start();}
public class LuxuryEngine implements Engin{ @Override public void run(){ System.out.println("转得快!"); } @Override public void start(){ System.out.println("启动快!可以自动启停"); }}
public class LowerEngine implements Engin{ @Override public void run(){ System.out.println("转得慢!"); } @Override public void start(){ System.out.println("启动慢!"); }}
public interface Seat{ void massage();}
public class LuxurySeat implements Seat{ @Override public void massage(){ System.out.println("可以按摩,座垫加热!"); }}
public class LowerSeat implements Seat{ @Override public void massage(){ System.out.println("普通座垫!"); }}
public interface Tyre{ void revolve();}
public class LuxuryTyre implements Tyre{ @Override public void revolve(){ System.out.println("旋转磨损慢"); }}
public class LowerTyre implements Tyre{ @Override public void revolve(){ System.out.println("旋转磨损快"); }}
抽象工厂接口
public interface CarFactory{ Engine createEngine(); Seat createSeat(); Tyre createTyre();}
具体的工厂
public class LuxuryCarFactory implements CarFactory{ @Override public Engine createEngine(){ return new LuxuryEngine(); } @Override public Seat createSeat(){ return new LuxurySeat(); } @Override public Tyre createTyre(){ return new LuxuryTyre(); }}
public class LowerCarFactory implements CarFactory{ @Override public Engine createEngine(){ return new LowerEngine(); } @Override public Seat createSeat(){ return new LowerSeat(); } @Override public Tyre createTyre(){ return new LowerTyre(); }}
0 0
- GOF23的一些总结(二)
- GOF23的一些总结(二十)
- GOF23的一些总结(二十一)
- GOF23的一些总结(二十一(下))
- GOF23的一些总结(一)
- GOF23的一些总结(三)
- GOF23的一些总结(四)
- GOF23的一些总结(五)
- GOF23的一些总结(六)
- GOF23的一些总结(七)
- GOF23的一些总结(八)
- GOF23的一些总结(九)
- GOF23的一些总结(十)
- GOF23的一些总结(十一)
- GOF23的一些总结(十二)
- GOF23的一些总结(十三)
- GOF23的一些总结(十四)
- GOF23的一些总结(十五)
- 两个环境变量PATH与CLASSPATH
- 模板式生成 JSP页面步骤
- TortoiseGit使用入门
- Codeforces 260E
- Unity3D的坐标系
- GOF23的一些总结(二)
- 5.4.2
- get和post区别
- Spark Streaming工作流程源码解析
- 【java】深入理解Java虚拟机
- lambda表达式案例(持续更新)
- 图片转换成字符输出
- ElasticSearch:Transport Client 对比 Node Client
- 卡特兰数