【设计模式】——工厂方法FactoryMethod

  前言:【模式总览】——————————by xingoohtml

  模式意图

  工厂方法在MVC中应用的很普遍。设计模式

  工厂方法意在分离产品与建立的两个层次,使用户在一个工厂池中能够选择本身想要使用的产品,而忽略其建立过程。spa

  简单来讲,就像一个大型的工厂,对于消费者来讲,只须要知道都有什么工厂的产品生产出来,而不须要关心工厂是如何生产产品的。对于工厂来讲,必须知道全部的产品的制造方法。设计

  模式结构

  Creator 建立工厂的接口code

  ConcreteCreator 具体的产品建立者htm

  Product 产品的接口对象

  ConcreteProduct 具体的产品blog

  适合场景

  1 当一个类不知道它所必须建立的对象的类的时候。接口

  2 当一个类但愿由他的子类来制定它所建立的对象的时候get

  3 当类建立对象的职责委托给多个帮助子类中的某一个,而且但愿进行一些信息的局部初始化的时候。

  代码结构

  工厂方法须要一个工厂接口,提供了基本的类模式,和一个产品接口,提供基本的方法。

1 interface Creator{ 2     public Product factory(); 3 } 4 interface Product{ 5     public void Say(); 6 }

  接下来就是具体的工厂方法,能够建立不一样的产品。

 1 class ConcreteCreator1 implements Creator{  2     public Product factory() {  3         return new ConcreteProduct1();  4  }  5 }  6 class ConcreteCreator2 implements Creator{  7     public Product factory() {  8         return new ConcreteProduct2();  9  } 10 }

  其次须要不一样的产品。

 1 class ConcreteProduct1 implements Product{  2     public void Say() {  3         System.out.println("ConcreteProduct1");  4  }  5 }  6 class ConcreteProduct2 implements Product{  7     public void Say() {  8         System.out.println("ConcreteProduct2");  9  } 10 }

  使用方法,大体以下

 1 public class test {  2     public static Creator creator1,creator2;  3     public static Product product1,product2;  4     public static void main(String[] args){  5         creator1 = new ConcreteCreator1();  6         creator2 = new ConcreteCreator2();  7         
 8         product1 = creator1.factory();  9         product2 = creator2.factory(); 10         
11  product1.Say(); 12  product2.Say(); 13  } 14 }

  生活中的设计模式

  

  目前的生活,是一种快餐的生活。有时候不想作饭,去饭店也等不及,肯德基、麦当劳、德克士就成为了一种很方便的方式。

  咱们去肯德基,一般会吃点汉堡,点点可乐,不须要知道这些东西是怎么作出来的,直接点,拿到吃,简单方便,这就是生活中的快餐工厂。

  经过一个MakeChoice方法,能够统一的进行选择。

interface KFC { public Client working(); } interface Client { public void eating(); } class Bread_Menu implements KFC { public Client working() { return new Client_Bread(); } } class Cola_Menu implements KFC { public Client working() { return new Client_Cola(); } } class Client_Bread implements Client { public void eating() { System.out.println("顾客 吃面包"); } } class Client_Cola implements Client { public void eating() { System.out.println("顾客 喝可乐"); } } public class FactoryMethodTest { public static KFC waiter; public static Client client1,client2; public static KFC MakeChoice(KFC maker){ if(maker instanceof Bread_Menu){ return new Bread_Menu(); }else{ return new Cola_Menu(); } } public static void main(String[] args){ System.out.println("-------------想吃面包-----------------"); waiter = MakeChoice(new Bread_Menu()); client1= waiter.working(); client1.eating(); System.out.println("-------------想喝可乐-----------------"); waiter = MakeChoice(new Cola_Menu()); client2 = waiter.working(); client2.eating(); } }

  执行以下

-------------想吃面包----------------- 顾客 吃面包 -------------想喝可乐----------------- 顾客 喝可乐
相关文章
相关标签/搜索