创建型模式01:简单工厂模式、工厂方法模式、抽象工厂模式
来源:互联网 发布:多益网络 上市 编辑:程序博客网 时间:2024/05/22 20:15
简单工厂模式
产品类:设置一个产品抽象类,写几个具体产品
工厂类:使用case语句来选择要生产的产品
客户类:创建工厂,生产具体产品
package creationalpattern.factorymethod.simple;/** * 客户类 * @author heinika *简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。 先来看看它的组成: 1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,用来创建产品 2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。 3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。 因为每增加一种新型车,都要在工厂类中增加相应的创建业务逻辑(createBMW(int type)方法需要新增case),这显然是违背开闭原则的。 于是工厂方法模式作为救世主出现了!!!!!!! */public class Customer { public static void main(String[] args) { Factory factory = new Factory(); factory.creatBMW(320); factory.creatBMW(325); }}/** * 简单工厂类 * @author heinika * */public class Factory { public BMW creatBMW(int type){ switch(type){ case 320: return new BMW320(); case 325: return new BMW325(); default: break; } return null; }}/** * 产品抽象类 */abstract class BMW {}public class BMW320 extends BMW{ public BMW320() { System.out.println("制造-->BMW320"); } }public class BMW325 extends BMW{ public BMW325() { System.out.println("制造-->BMW325"); } }
工厂方法模式
产品类:设置一个产品抽象类,写几个具体产品(同简单工厂)
工厂类:设置一个工厂接口,不同的多个工厂制造不同的车
客户类:创建具体工厂,生产具体产品
/** * 工厂方法模式仿佛已经很完美的对对象的创建进行了包装, * 使得客户程序中仅仅处理抽象产品角色提供的接口,但使得对象的数量成倍增长。 * 当产品种类非常多时,会出现大量的与之对应的工厂对象,这不是我们所希望的。 * @author heinika * */public class Customer { public static void main(String[] args) { Factory factory320 = new BMW320Factory(); factory320.creatBMW(); Factory factory325 = new BMW325Factory(); factory325.creatBMW(); }}/** * 工厂类 * 相较于简单工厂,制造的方法变成抽象的了 * @author heinika * */public interface Factory { BMW creatBMW();}public class BMW320Factory implements Factory { @Override public BMW creatBMW() { return new BMW320(); }}public class BMW325Factory implements Factory { @Override public BMW creatBMW() { return new BMW325(); }}/** * 产品抽象类 */abstract class BMW {}public class BMW320 extends BMW{ public BMW320() { System.out.println("制造-->BMW320"); } }public class BMW325 extends BMW{ public BMW325() { System.out.println("制造-->BMW325"); } }
抽象工厂模式
产品类:设置多个产品抽象类,并对应写几个具体产品
工厂类:设置一个工厂接口抽象不同产品的制造方法,多个工厂制造不同产品的不同类型
客户类:创建具体工厂,生产具体的多个产品
/** * 抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。 * 比如宝马320系列使用空调型号A和发动机型号A,而宝马230系列使用空调型号B和发动机型号B, * 那么使用抽象工厂模式,在为320系列生产相关配件时, * 就无需制定配件的型号,它会自动根据车型生产对应的配件型号A。 * @author Administrator * * *无论是简单工厂模式,工厂方法模式,还是抽象工厂模式,他们都属于工厂模式, *在形式和特点上也是极为相似的,他们的最终目的都是为了解耦。 *在使用时,我们不必去在意这个模式到底工厂方法模式还是抽象工厂模式,因为他们之间的演变常常是令人琢磨不透的。 *经常你会发现,明明使用的工厂方法模式,当新需求来临,稍加修改, *加入了一个新方法后,由于类中的产品构成了不同等级结构中的产品族, *它就变成抽象工厂模式了;而对于抽象工厂模式,当减少一个方法使的提供的产品不再构成产品族之后,它就演变成了工厂方法模式。 */public class Customer { public static void main(String[] args) { FactoryBMW320 factoryBMW320 = new FactoryBMW320(); factoryBMW320.createAircondition(); factoryBMW320.createEngine(); FactoryBMW325 factoryBMW325 = new FactoryBMW325(); factoryBMW325.createAircondition(); factoryBMW325.createEngine(); }}/** * 工厂类 * 相较于工厂模式,有多个制造方法。 * 工厂能实现不同的搭配 * @author heinika * */public interface AbstractFactory { //制造发动机 public Engine createEngine() ; //制造空调 public Aircondition createAircondition();}//为宝马320系列生产配件 public class FactoryBMW320 implements AbstractFactory{ @Override public Engine createEngine() { return new EngineB(); } @Override public Aircondition createAircondition() { return new AirconditionB(); } } //为宝马325系列生产配件 public class FactoryBMW325 implements AbstractFactory{ @Override public Engine createEngine() { return new EngineA(); } @Override public Aircondition createAircondition() { return new AirconditionA(); } } /** * 产品抽象类 */package creationalpattern.factorymethod.abstractfactory;/** * 产品类 空调及其型号 * @author Administrator * */public interface Aircondition {}/** * 产品类 发动机及其型号 * @author Administrator * */public interface Engine {}public class AirconditionA implements Aircondition { public AirconditionA(){ System.out.println("制造-->AirconditionA"); }}public class EngineA implements Engine { public EngineA(){ System.out.println("制造-->EngineA"); }}
1 0
- 创建型模式01:简单工厂模式、工厂方法模式、抽象工厂模式
- "围观"设计模式(8)--创建型之简单工厂模式、工厂方法模式、抽象工厂模式
- "围观"设计模式(8)--创建型之简单工厂模式、工厂方法模式、抽象工厂模式
- 创建型模式:工厂模式(简单工厂模式,抽象工厂模式,工厂模式)
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂|工厂方法|抽象工厂模式
- 设计模式-工厂模式(简单工厂,工厂方法,抽象工厂)
- java工厂模式-简单工厂,工厂方法,抽象工厂模式
- 2-创建型-简单工厂模式-工厂方法模式-抽象工厂模式
- 简单工厂模式、工厂方法模式和抽象工厂模式
- 简单工厂模式,工厂方法模式,抽象工厂模式区别
- 简单工厂模式,工厂方法模式,抽象工厂模式 比较
- 简单工厂模式,工厂方法模式,抽象工厂模式 比较
- 简单工厂模式 工厂方法模式 抽象工厂模式
- 简单工厂模式,工厂方法模式,抽象工厂模式 比较
- 简单工厂模式,工厂方法模式,抽象工厂模式 比较
- 简单工厂模式,工厂方法模式,抽象工厂模式
- CS/BS模式
- hdu 5372 Segment Game (树状数组+离散化)
- jquery autocomplete文本自动补全
- (一二〇)CALayer的一些特性
- IOS 秒数转换为天数和小时数
- 创建型模式01:简单工厂模式、工厂方法模式、抽象工厂模式
- The JavaScript Event Loop: Explained
- POJ 1584 A Round Peg in a Ground Hole
- sizeof求结构体内存大小
- 多线程经典问题1——主线程子线程交替问题
- 浅谈iOS内存管理
- 黑马程序员------OC中NSLog与printf的区别
- Linux下如何用GCC编译动态库
- UI Block传值