北京保障房建设网站,wordpress评论表情插件,快速建站模板自助建站,wordpress 本地建站工厂模式的目的就是将对象的创建过程隐藏起来#xff0c;从而达到很高的灵活性#xff0c;工厂模式分为三类#xff1a;
简单工厂模式工厂方法模式抽象工厂模式
在没有工厂模式的时候就是#xff0c;客户需要一辆马车#xff0c;需要客户亲自去创建一辆马车#xff0c;…工厂模式的目的就是将对象的创建过程隐藏起来从而达到很高的灵活性工厂模式分为三类
简单工厂模式工厂方法模式抽象工厂模式
在没有工厂模式的时候就是客户需要一辆马车需要客户亲自去创建一辆马车然后拿来用。
在简单工厂模式下客户可以通过工厂获得一辆马车需要下单后告诉马车的型号然后工厂可以根据型号创建马车。在工厂方法模式下客户想要一辆马车需要指明型号创建。比如325i的bmw,和530li,根据各自325i的工厂和530li的工厂创建每个工厂创建一个系列。即具体的工厂只能创建出一个具体的产品。在抽象工厂模式下客户想要一辆带空调的宝马车于是开始创建带空调的宝马车不需要自己创建安装。 不适用工厂模式
如果不使用工厂用户将自己创建宝马车具体UML图和代码如下
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.UML图 工厂类角色 该模式的核心用来创建产品含有一定的商业逻辑和判断逻辑 抽象产品角色它一般是具体产品继承的父类或者实现的接口。 具体产品角色工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
2.代码实现
产品类
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);}
}
3.优点 简单工厂模式提供了专门的工厂类用于创建对象实现类对象的创建和使用的职责分离客户端不需要知道所创建的具体产品类的类名以及创建过程只需要具体产品所对应的参数即可。通过引入配置文件可以在不修改任何客户端代码的情况下更换和增加新的具体产品类在一定程度上提高了系统的灵活性。
4.缺点 在于不符合“开闭原则”每次添加新产品就需要修改工厂类。在产品类型较多时有可能造成工厂逻辑过于复杂不利于系统的扩展维护并且工厂类集中了所有产品创建逻辑一旦不能正常工作整个系统都要受到影响。
为了解决简单工厂模式的问题出现了工厂方法模式。 工厂模式 工厂方法模式将工厂抽象化并定义一个创建对象的接口。每增加新产品只需增加该产品以及对应的具体实现工厂类由具体工厂类决定要实例化的产品是哪个将对象的创建与实例化延迟到子类这样工厂的设计就符合“开闭原则”了扩展时不必去修改原来的代码。在使用时用于只需知道产品对应的具体工厂不需要关注具体的创建过程甚至不需要知道具体产品类的类名当我们选择哪个具体工厂时就已经决定了实际创建的产品是哪个了。 但缺点在于每增加一个产品都需要增加一个具体产品类和实现工厂类使得系统中类的个数成倍增加在一定程度上增加了系统的复杂度同时也增加了系统具体类的依赖。
1.UML图 抽象工厂 AbstractFactory 工厂方法模式的核心是具体工厂角色必须实现的接口或者必须继承的父类在 Java 中它由抽象类或者接口来实现。具体工厂 Factory被应用程序调用以创建具体产品的对象含有和具体业务逻辑有关的代码抽象产品 AbstractProduct是具体产品继承的父类或实现的接口在 Java 中一般有抽象类或者接口来实现。 具体产品 Product具体工厂角色所创建的对象就是此角色的实例。代码实现
产品类
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{Overridepublic BMW320 createBMW() {return new BMW320();}}
public class FactoryBMW523 implements FactoryBMW {Overridepublic 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();}
}