设计模式-6.简单工厂模式、工厂模式、抽象工厂模式
来源:互联网 发布:淘宝模特室内怎么布光 编辑:程序博客网 时间:2024/05/20 02:53
简单工厂模式:Simple Factory
工厂方法模式:Factory Method
抽象工厂模式:Abstract Factory
*************************************************************************************************************
简单工厂模式包含三个角色:
工厂类(Factory)角色:工厂类在客户端的调用下创建产品对象,由一个具体java类实现
抽象产品(product)角色:担任该角色的类由工厂模式所创建的对象的父类,通常由一个接口或抽象类实现
具体产品(Concrete Product)角色:由工厂模式创建的任何对象都是这个角色的实例,由一个java类实现
**************************************************************************************************************
优点:客户端可以免除直接创建产品对象的责任。
缺点:工厂类中集中了所有产品的创建逻辑,当产品类有不同的接口种类时,工厂类需要判断在什么时候创建某种产品,容易混乱。
**************************************************************************************************************
工厂类:
public class MovebileFactory{public static Movebile factory(String movebilename){if(movebilename.equals("Xiaomi")){return new Xiaomi();}else if(movebilename.equals("Meizu")){return new Meizu();}return null;}}
抽象产品角色:
public interface Movebile{public void call();public void sendMessage();}
具体产品角色:
public class Xiaomi implements Movebile{@Overridepublic void call(){System.out.println("用小米打电话");}@Overridepublic void sendMessage(){System.out.println("用小米发短信");}}
public class Meizu implements Movebile{@Overridepublic void call(){System.out.println("用魅族打电话");}@Overridepublic void sendMessage(){System.out.println("用魅族发短信");}}测试类:
public class Client{<pre name="code" class="java">public interface Movebile{public void call();public void sendMessage();}
public static void main(String[] args){Movebile xiaomi = MovebileFactory.factory("Xiaomi");xiaomi.call();xiaomi.sendMessage();}}*************************************************************************************************************************
*************************************************************************************************************************
针对简单工厂模式的缺点,工厂方法模式做了改进,包含四个角色:
抽象工厂角色(Factory):该角色是工厂方法模式的核心,任何在模式中创建对象的工厂类必须实现这个接口
具体工厂角色(Concrete Factory):具体工厂角色含有与应用密切相关的逻辑,并且受到应用程序的调用以创建产品对象,是具体类
抽象产品角色(Product):产品对象额共同父类或共同拥有的接口
具体产品角色(Concrete Product):工厂方法模式所创建的每一个对象都是某个具体产品角色的实例,是一个具体类
******************************************************************
抽象工厂角色:
public interface MovebileFactory{public Movebile factory();}
具体工厂角色:
public class XiaomiFactory implements MovebileFactory{@Overridepublic Movebile factory(){// TODO Auto-generated method stubreturn new Xiaomi();}}
public class MeizuFactory implements MovebileFactory{@Overridepublic Movebile factory(){// TODO Auto-generated method stubreturn new Meizu();}}
抽象产品角色:
public interface Movebile{public void call();public void sendMessage();}
具体产品角色:
public class Xiaomi implements Movebile{@Overridepublic void call(){System.out.println("用小米打电话");}@Overridepublic void sendMessage(){System.out.println("用小米发短信");}}
public class Meizu implements Movebile{@Overridepublic void call(){System.out.println("用魅族打电话");}@Overridepublic void sendMessage(){System.out.println("用魅族发短信");}}
客户端:
public class Client{public static void main(String[] args){MovebileFactory xiaomifactory = new XiaomiFactory();Movebile xiaomi = xiaomifactory.factory();xiaomi.call();xiaomi.sendMessage();}}
注意:这里的具体工厂只能生产单一的某种产品,如小米工厂就只能生产小米手机;下面的抽象工厂模式,具体的工厂就可以即生产小米又生产魅族,达到真正的抽象,这就是所谓的“抽象工厂”模式。
*******************************************************************************************************************************************
抽象工厂模式同样包含四个角色:
抽象工厂角色:与工厂模式不同,包含实现不同产品的方法
具体工厂角色:与工厂模式不同的是,具体工厂中含有选择合适的产品对象的逻辑,既可以生产不同的产品对象
抽象产品角色:这里的产品不只包含一个
具体产品角色:同工厂模式
*****************************************************************************
参考的博文中对三种模式的区别做了详细介绍
参考:http://ichennan.com/2016/08/09/DesignPattern.html
- 设计模式(简单工厂模式,工厂模式,抽象工厂模式)
- 设计模式-工厂模式(简单工厂,工厂方法,抽象工厂)
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 设计模式 - 工厂模式(简单,工厂方法,抽象工厂)
- C++设计模式新解三 简单工厂 工厂模式 抽象工厂
- C++设计模式之简单工厂、工厂模式、抽象工厂
- 设计模式指工厂模式(简单工厂,抽象工厂)
- 设计模式____工厂模式(简单工厂,抽象工厂)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- 2.工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)(设计模式笔记)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- java设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- HDU 1055(贪心)
- 引用Duktape
- mybatis是如何防止SQL注入的
- Unity API(五):鼠标事件
- Roman to Integer
- 设计模式-6.简单工厂模式、工厂模式、抽象工厂模式
- Windows 2012 R2 Standard 产品密钥
- Longest Consecutive Sequence
- 科学决策理论的基本论点
- STM32学习笔记之待机唤醒
- ES2015 & babel 实战:开发 NPM 模块
- linux内核分析-内存管理
- 成大事必须依靠的五种人
- Inorder Successor in BST