设计模式 Design Pattern —— 工厂模式 +抽象工厂模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了设计模式 Design Pattern —— 工厂模式 +抽象工厂模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4164字,纯文字阅读大概需要6分钟。
内容图文
![设计模式 Design Pattern —— 工厂模式 +抽象工厂模式](/upload/InfoBanner/zyjiaocheng/1024/4527913155754b94a1038ddf963e75cc.jpg)
工厂作用:创建者和调用者分离
分类:
简单工厂
工厂方法
抽象工厂
符合的OOP原则:开闭原则、依赖倒转原则(针对接口,而不是针对实现)、迪米特法则(只与直接朋友通信)
首先写个接口:
public interface Car { void name(); }
然后implement两个类:
public class NIO implements Car { @Override public void name() { System.out.println("This is 蔚来汽车"); } }
public class Tesla implements Car { @Override public void name() { System.out.println("This is 特斯拉"); } }
然后写个测试类:
public class Test { public static void main(String[] args) { Car car1 = new Tesla(); car1.name(); Car car2 = new NIO(); car2.name(); } }
这时候需要new出对象来,不高级,没有工厂自动化生产对象
一、静态工厂/ 简单工厂模式 (用的最多)
public class SimpleFactory { public static Car getCar(String car){ if(car.equals("NIO")) return new NIO(); if(car.equals("Tesla")) return new Tesla(); else return null; } }
测试
public class Test { public static void main(String[] args) { CarFactory.getCar("NIO").name(); //进步是传参进去就好了,不用在这里new了 CarFactory.getCar("Tesla").name(); } }
这种方法也不好,不方便扩展,扩展的时候,还要改原来的代码。==》不满足 "开闭原则"
二、工厂方法 模式
加一层,为每个类型写一个new的工厂;
增加了代码量,但是符合OOP原则:开闭原则(新增功能不用改原来的代码)
public class TeslaFactory implements Factory{ @Override public Car getCar() { return new Tesla(); //getCar调用Tesla()类的构造器 } }
public class NIOFactory implements Factory { @Override public Car getCar() { return new NIO(); } }
public class Test { public static void main(String[] args) { Car car1 = new TeslaFactory().getCar(); car1.name(); new NIOFactory().getCar().name(); } }
https://www.bilibili.com/video/BV1mc411h719?p=3&spm_id_from=pageDriver 21:24
三、抽象工厂 模式
抽象工厂("工厂的工厂")负责创建各个工厂,是一个超级工厂
适用场景:
例子:
具体代码:
public interface Phone { void start(); void shutdown(); void call(); void message(); }
public class HuaweiPhone implements Phone{ @Override public void start() { System.out.println("开启华为手机"); } @Override public void shutdown() { System.out.println("关闭华为手机"); } @Override public void call() { System.out.println("华为打电话"); } @Override public void message() { System.out.println("华为打电话"); } }
public class XiaomiPhone implements Phone{ @Override public void start() { System.out.println("开启小米手机"); } @Override public void shutdown() { System.out.println("关闭小米手机"); } @Override public void call() { System.out.println("小米打电话"); } @Override public void message() { System.out.println("小米打电话"); } }
public interface Router { void start(); void shutdown(); void wifi(); }
public class HuaweiRouter implements Router{ @Override public void start() { System.out.println("打开华为路由器"); } @Override public void shutdown() { System.out.println("关闭华为路由器"); } @Override public void wifi() { System.out.println("华为wifi"); } }
public class XiaomiRouter implements Router{ @Override public void start() { System.out.println("打开小米路由器"); } @Override public void shutdown() { System.out.println("关闭小米路由器"); } @Override public void wifi() { System.out.println("小米wifi"); } }
然后开始创建工厂:
public interface AbstractFactory { Phone phone(); Router router(); }
public class HuaweiFactory implements AbstractFactory{ @Override public Phone phone() { return new HuaweiPhone(); } @Override public Router router() { return new HuaweiRouter(); } }
public class XiaomiFactory implements AbstractFactory{ @Override public Phone phone() { return new XiaomiPhone(); } @Override public Router router() { return new XiaomiRouter(); } }
Test:
public class Test { public static void main(String[] args) { System.out.println("======Huawei系列产品======"); HuaweiFactory huaweiFactory = new HuaweiFactory(); Phone phone = huaweiFactory.phone(); //实际生产的时候,分两层,第一层找具体factory,第二层找具体产品 phone.call(); phone.shutdown(); Router router =huaweiFactory.router(); router.wifi(); System.out.println("======小米产品======"); XiaomiFactory xiaomiFactory = new XiaomiFactory(); Phone phone2= xiaomiFactory.phone(); phone2.message(); } }
以上代码生成 Class Diagram:
特色:
一个Factory作为一个产品簇,这样实际生产的时候,分两层,第一层找具体factory,第二层找具体产品
增/删 新的品牌,无需更改原有代码;增/删 新的产品,对原有改动很小
内容总结
以上是互联网集市为您收集整理的设计模式 Design Pattern —— 工厂模式 +抽象工厂模式全部内容,希望文章能够帮你解决设计模式 Design Pattern —— 工厂模式 +抽象工厂模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。