设计模式-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

0 0