工厂设计模式
来源:互联网 发布:淘宝会员抓取系统 编辑:程序博客网 时间:2024/06/06 20:13
今天学习了工厂设计模式,在此做个总结,以便今后查阅。
1.工厂设计模式的目的:提供了创建对象的过渡接口,将对象的创建隐藏起来
2.工厂模式分为三种:
1)简单工厂模式:多个产品类,一个工厂类,工厂类根据传入的参数的不同返回不同的产品类
产品类:
class BMW{public BMW(){}}class BMW320 extends BMW{public BMW320(){System.out.println("creat BMW320");}}class BMW520 extends BMW{public BMW520(){System.out.println("creat BMW520");}}
工厂类:
class BMWFactory{public BMW creatBMW(int type){switch(type){case 320:return new BMW320();break;case 520:return new BMW520();break;default:break;}return null;}}客户类:
public class lpq{public static void main(String[] args){BMWFactory bmwFactory=new BMWFactory();//实例化工厂类BMW bmw320=bmwFactory.creatBMW(320);BMW bmw520=bmwFactory.creatBMW(520);}}
从“开闭原则”(对扩展开放,对修改封闭)来看,每增加一种新的产品时,都需要修改工厂类,违背了开闭原则
2)工厂方法模式:多个产品类,多个工厂类,每个工厂类对应一个产品类
产品类:
class BMW{public BMW(){}}class BMW320 extends BMW{public BMW320(){System.out.println("creat BMW320");}}class BMW520 extends BMW{public BMW520(){System.out.println("creat BMW520");}}工厂类:
class Factory{public Factory(){System.out.println("工厂类的公共实现部分");}}class BMW320Factory extends Factory{public BMW creatBMW320(){return new BMW320();}}class BMW520Factory extends Factory{public BMW creatBMW520(){return new BMW520();}}
客户类:
public class lpq{public static void main(String[] args){BMW320Factory bmw320factory=new BMW320Factory();//实例化工厂类1BMW bmw320=bmw320factory.creatBMW320();BMW520Factory bmw520factory=new BMW520Factory();//实例化工厂类2}
3)抽象工厂模式:
//抽象产品(Bmw和Audi同理)
abstract class BenzCar{ private String name; public abstract void drive(); public String getName() { return name; } public void setName(String name) { this.name = name; } } //具体产品(Bmw和Audi同理) class BenzSportCar extends BenzCar{ public void drive(){ System.out.println(this.getName()+"----BenzSportCar-----------------------"); } } class BenzBusinessCar extends BenzCar{ public void drive(){ System.out.println(this.getName()+"----BenzBusinessCar-----------------------"); } } abstract class BmwCar{ private String name; public abstract void drive(); public String getName() { return name; } public void setName(String name) { this.name = name; } } class BmwSportCar extends BmwCar{ public void drive(){ System.out.println(this.getName()+"----BmwSportCar-----------------------"); } } class BmwBusinessCar extends BmwCar{ public void drive(){ System.out.println(this.getName()+"----BmwBusinessCar-----------------------"); } } abstract class AudiCar{ private String name; public abstract void drive(); public String getName() { return name; } public void setName(String name) { this.name = name; } } class AudiSportCar extends AudiCar{ public void drive(){ System.out.println(this.getName()+"----AudiSportCar-----------------------"); } } class AudiBusinessCar extends AudiCar{ public void drive(){ System.out.println(this.getName()+"----AudiBusinessCar-----------------------"); } } //抽象工厂 abstract class Driver3{ public abstract BenzCar createBenzCar(String car) throws Exception; public abstract BmwCar createBmwCar(String car) throws Exception; public abstract AudiCar createAudiCar(String car) throws Exception; } //具体工厂 class SportDriver extends Driver3{ public BenzCar createBenzCar(String car) throws Exception { return new BenzSportCar(); } public BmwCar createBmwCar(String car) throws Exception { return new BmwSportCar(); } public AudiCar createAudiCar(String car) throws Exception { return new AudiSportCar(); } } class BusinessDriver extends Driver3{ public BenzCar createBenzCar(String car) throws Exception { return new BenzBusinessCar(); } public BmwCar createBmwCar(String car) throws Exception { return new BmwBusinessCar(); } public AudiCar createAudiCar(String car) throws Exception { return new AudiBusinessCar(); } } //老板 public class BossAbstractFactory { public static void main(String[] args) throws Exception { Driver3 d = new BusinessDriver(); AudiCar car = d.createAudiCar(""); car.drive(); } }0 0
- 设计模式--工厂设计
- 设计模式------工厂模式
- 设计模式------工厂模式
- 设计模式 [ 工厂模式 ]
- 设计模式--工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- 设计模式 工厂模式
- 设计模式-工厂模式
- 设计模式 -- 工厂模式
- 设计模式-工厂模式
- 设计模式----工厂模式
- 设计模式---工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- 设计模式---工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- IdeaUI的问题
- html5表单新增3个属性
- 水塘抽样
- python模拟浏览器访问网站
- XP电脑桌面图标文字带上颜色不透明 解决办法
- 工厂设计模式
- C 消息队列实现通信
- 润乾报表内置hsql的端口占用问题
- Android Path 解析
- mysql中数据库的备份与恢复
- Linux下段错误 coredump设置
- 数据库事务(Transaction)的ACID特性解释
- JavaWeb工作原理
- 杨辉三角