博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
工厂模式
阅读量:4100 次
发布时间:2019-05-25

本文共 4124 字,大约阅读时间需要 13 分钟。

工厂模式:属于创建型模式之一,他提供了一种创建对象的最佳方式,主要为了降低耦合度。工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的

工厂模式根据抽象程度不同分为三种:

(1)简单工厂模式(静态工厂模式)

(2)工厂方法模式

(3)抽象工厂模式

(1)简单工厂模式:实质是由一个工厂根据传入的参数,动态决定应该创建哪一种产品类(这些产品类继承自一个父类或接口)。简单工厂模式的创建目标,所有创建的对象都应该充当这个角色的某个具体类的实例

(2)工厂模式是一种粒度很小的设计模式,因为模式的表现只是一个抽象的方法。提前定义用于创建对象的接口,让子类决定实例化具体的某一个类,即在工厂和产品中间添加接口,工厂不再负责产品的创建,由接口针对不同条件返回具体的类实例,由具体类势力去实现

(3)抽象工厂:当有多个抽象对象时使用一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的1具体的情况下,创建多个产品对象,每个抽象产品类可以派生出多个具体产品类,一个抽象工厂类,可以派生出多个具体工厂类,没个具体工厂类可以创建多个具体产品类的实例

//最初未使用工厂模式时,客户需要知道怎么去创建一款车,客户和车紧密耦合public class BMW320 {	public BMW320(){		System.out.println("制造-->BMW320");	}} public class BMW523 {	public BMW523(){		System.out.println("制造-->BMW523");	}} public class Customer {	public static void main(String[] args) {		BMW320 bmw320 = new BMW320();		BMW523 bmw523 = new BMW523();	}}

 简单工厂模式:

//简单工厂模式(静态工厂模式)//组成:(1)工厂类角色;(2)抽象产品角色;(3)具体产品角色//缺点:每增加一种新的类型,都要在工厂类中添加相应的创建业务逻辑,即:添加case,有些违背开闭原则//产品类abstract class BMW {	public BMW(){			}} public class BMW320 extends BMW {	public BMW320() {		System.out.println("制造-->BMW320");	}}public class BMW523 extends BMW{	public BMW523(){		System.out.println("制造-->BMW523");	}}//工厂类public class Factory {	public BMW createBMW(int type) {		switch (type) {				case 320:			return new BMW320(); 		case 523:			return new BMW523(); 		default:			break;		}		return null;	}}//客户类public class Customer {	public static void main(String[] args) {		Factory factory = new Factory();		BMW bmw320 = factory.createBMW(320);		BMW bmw523 = factory.createBMW(523);	}}

工厂模式:

//工厂模式:去掉了简单工厂模式中工厂模式的静态属性,使得可以被子类继承//工厂模式的组成:(1)抽象工厂角色;(2)具体工厂角色;(3)抽象产品角色;(4)具体产品角色//产品类abstract class BMW {	public BMW(){			}}public class BMW320 extends BMW {	public BMW320() {		System.out.println("制造-->BMW320");	}}public class BMW523 extends BMW{	public BMW523(){		System.out.println("制造-->BMW523");	}}//创建工厂类interface FactoryBMW {	BMW createBMW();} public class FactoryBMW320 implements FactoryBMW{ 	@Override	public BMW320 createBMW() { 		return new BMW320();	} }public class FactoryBMW523 implements FactoryBMW {	@Override	public BMW523 createBMW() { 		return new BMW523();	}}//客户类public class Customer {	public static void main(String[] args) {		FactoryBMW320 factoryBMW320 = new FactoryBMW320();		BMW320 bmw320 = factoryBMW320.createBMW(); 		FactoryBMW523 factoryBMW523 = new FactoryBMW523();		BMW523 bmw523 = factoryBMW523.createBMW();	}}

抽象工厂:

//抽象工厂//产品类//发动机以及型号  public interface Engine {   }  public class EngineA extends Engine{      public EngineA(){          System.out.println("制造-->EngineA");      }  }  public class EngineB extends Engine{      public EngineB(){          System.out.println("制造-->EngineB");      }  }   //空调以及型号  public interface Aircondition {   }  public class AirconditionA extends Aircondition{      public AirconditionA(){          System.out.println("制造-->AirconditionA");      }  }  public class AirconditionB extends Aircondition{      public AirconditionB(){          System.out.println("制造-->AirconditionB");      }  } //创建工厂类//创建工厂的接口  public interface AbstractFactory {      //制造发动机    public Engine createEngine();    //制造空调     public Aircondition createAircondition(); }    //为宝马320系列生产配件  public class FactoryBMW320 implements AbstractFactory{            @Override      public Engine createEngine() {            return new EngineA();      }      @Override      public Aircondition createAircondition() {          return new AirconditionA();      }  }  //宝马523系列public class FactoryBMW523 implements AbstractFactory {         @Override      public Engine createEngine() {            return new EngineB();      }      @Override      public Aircondition createAircondition() {          return new AirconditionB();      }    } //客户public class Customer {      public static void main(String[] args){          //生产宝马320系列配件        FactoryBMW320 factoryBMW320 = new FactoryBMW320();          factoryBMW320.createEngine();        factoryBMW320.createAircondition();                  //生产宝马523系列配件          FactoryBMW523 factoryBMW523 = new FactoryBMW523();          factoryBMW320.createEngine();        factoryBMW320.createAircondition();    }  }

 

你可能感兴趣的文章
video 小窗播放 (记)
查看>>
移动端点击事件、滑动不可用的坑~~
查看>>
vue中动态添加swiper,滑动效果不起作用
查看>>
ios下输入框input进行fixed定位 bug
查看>>
事件委托之 ios
查看>>
小程序中 opacity 真机无效
查看>>
获取经纬度之间的距离
查看>>
加入购物车动画,基于jquery的fly.js插件
查看>>
jQuery.range 双滑块范围选择
查看>>
node 创建一个服务
查看>>
react初识
查看>>
markdown表情包
查看>>
react super理解
查看>>
mint-ui弹窗cdn引入如何调用?
查看>>
github+hexo搭建博客基础教程
查看>>
移动端无插件上拉加载
查看>>
webpack基础
查看>>
webpack基础配置(1)
查看>>
webpack图片打包(2)
查看>>
centos7安装docker
查看>>