工厂模式
来源:互联网 发布:android 内存管理源码 编辑:程序博客网 时间:2024/06/08 12:42
工厂模式(实现了创建者与调用者的分离)
核心本质:实例化对象,用工厂方法代替new操作;将选择实现类、创建对象统一管理和控制,从而将调用者跟我们的实现类解耦。
分类
1 简单工厂模式:用来生产同一等级结构中的任意产品,只有一个工厂类。也叫静态工厂模式,就是工厂类一般使用静态方法,通过接受的参数来返回不同的对象实例(缺点:对于增加新的产品,需要修改已有代码,违反了开闭原则)
2 工厂方法模式:有一组实现了相同接口的工厂类,不修改已有类的基础上,通过增加新的工厂类实现扩展
根据设计理论建议:工厂方法模式,但实际上一般使用简单工厂模式
3 抽象工厂模式:用来生产不同产品族的全部产品(不可以增加产品,但可以增加产品族);是工厂方法模式的升级版,在有多个业务品种,业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。
Java代码:
1简单工厂模式:
package factory.simplefactory;public class Audi implements Car {@Overridepublic void run() {System.out.println("奥迪在跑!");}}
package factory.simplefactory;public class Byd implements Car {@Overridepublic void run() {System.out.println("比亚迪在跑!");}}
package factory.simplefactory;public interface Car {void run();}
package factory.simplefactory;public class CarFactory {public static Car createCar(String type) {if ("奥迪".equals(type)) {return new Audi();} else if ("比亚迪".equals(type)) {return new Byd();} else {return null;}}}
package factory.simplefactory;//简单工厂类public class CarFactory2 {public static Car createAudi() {return new Audi();}public static Car createByd() {return new Byd();}}注:CarFactory与CarFactory2都可以用在简单工厂模式
package factory.simplefactory;//测试在没有工厂模式的情况下public class Client01 { // 调用者public static void main(String[] args) {Car c1 = new Audi();Car c2 = new Byd();c1.run();c2.run();}}
package factory.simplefactory;//测试在简单工厂模式的情况下public class Client02 { // 调用者public static void main(String[] args) {Car c1 = CarFactory.createCar("奥迪");Car c2 = CarFactory.createCar("比亚迪");c1.run();c2.run();}}注:Client01是在没有简单工厂模式下的测试类,Client02是在有简单工厂模式下的测试类
2 工厂方法模式
package factory.factorymethod;public class Audi implements Car {@Overridepublic void run() {System.out.println("奥迪在跑!");}}
package factory.factorymethod;public class Byd implements Car {@Overridepublic void run() {System.out.println("比亚迪在跑!");}}
package factory.factorymethod;public interface Car {void run();}
package factory.factorymethod;public interface CarFactory {Car createCar();}
package factory.factorymethod;public class AudiFactory implements CarFactory {public Car createCar() {return new Audi();}}
package factory.factorymethod;public class BydFactory implements CarFactory {public Car createCar() {return new Audi();}}
package factory.factorymethod;public class Client {public static void main(String[] args) {Car c1 = new AudiFactory().createCar();Car c2 = new BydFactory().createCar();c1.run();c2.run();}}
3 抽象工厂模式:
package factory.abstractFactory;public interface Engine {void run();void start();}class LuxuryEngine implements Engine {public void run() {System.out.println("转的快!");}public void start() {System.out.println("启动快!可以自动启停!");}}class LowEngine implements Engine {public void run() {System.out.println("转的慢!");}public void start() {System.out.println("启动慢!");}}
package factory.abstractFactory;public interface Seat {void massage();// 按摩}class LuxurySeat implements Seat {public void massage() {System.out.println("可以自动按摩!");}}class LowSeat implements Seat {public void massage() {System.out.println("不可以自动按摩!");}}
package factory.abstractFactory;public interface Tyre {void revolve();}class LuxuryTyre implements Tyre {public void revolve() {System.out.println("旋转不磨损");}}class LowTyre implements Tyre {public void revolve() {System.out.println("旋转磨损快");}}
package factory.abstractFactory;public interface CarFactory {Engine createEngine();Seat createSeat();Tyre createTyre();}
package factory.abstractFactory;public class LuxuryCarFactory implements CarFactory {public Engine createEngine() {return new LuxuryEngine();}public Seat createSeat() {return new LuxurySeat();}public Tyre createTyre() {return new LuxuryTyre();}}
package factory.abstractFactory;public class LowCarFactory implements CarFactory {public Engine createEngine() {return new LowEngine();}public Seat createSeat() {return new LowSeat();}public Tyre createTyre() {return new LowTyre();}}
package factory.abstractFactory;public class Client {public static void main(String[] args) {CarFactory factory = new LuxuryCarFactory();Engine e = factory.createEngine();e.run();e.start();}}
0 0
- 工厂模式 -- 工厂方法
- 工厂模式 -- 抽象工厂
- 工厂模式-简单工厂
- 工厂模式-工厂方法
- 工厂模式:静态工厂
- 工厂模式-简单工厂
- 工厂模式-抽象工厂
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-静态工厂
- 工厂模式-抽象工厂
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 创建单链表的头插法和尾插法
- webservice客户端异常( undefinedelement declaration 's:schema')
- 面试问题总结
- sap ABAP 显示计时秒表 函数“SAPGUI_PROGRESS_INDICATOR”
- 9. Palindrome Number
- 工厂模式
- oj刷题—Problem B: C语言习题5.25--文件操作2
- __block/__weak/__bridge的用法说明
- 消息队列的两种模式
- C++ 个人整理
- 关于逗号运算符~
- iOS GCD
- 项目会议记录--QR[2017.03.15]
- HTML和CSS的知识点