本文共 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(); } }