码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式(4)---工厂方法模式

时间:2016-08-03 00:08:51      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:

1.简单工厂模式(simple factory)

   简单工厂模式属于创建型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

1 package SimpleFactory;
2 
3 public abstract class Animal {
4 
5     public abstract void eat();
6 
7 }

 

 1 package SimpleFactory;
 2 
 3 public class Dog extends Animal{
 4 
 5     public Dog() {
 6         
 7     }
 8 
 9     @Override
10     public void eat() {
11         System.out.println("狗吃肉");    
12     }
13     
14 }

 

 1 package SimpleFactory;
 2 
 3 public class Cat extends Animal{
 4 
 5     public Cat() {
 6     }
 7 
 8     @Override
 9     public void eat() {
10         System.out.println("猫吃鱼");    
11     }
12     
13 }

 

 1 package SimpleFactory;
 2 
 3 public class AnimalFactory {
 4 
 5     private AnimalFactory() {
 6 
 7     }
 8     
 9     public static Animal createAnimal(String type){
10         if ("dog".equals(type)){
11             return new Dog() ;
12         }else if ("cat".equals(type)){
13             return new Cat() ;
14         }
15         return null;
16     }
17 
18 }

 

 1 package SimpleFactory;
 2 
 3 public class Test {
 4 
 5     public Test() {
 6         
 7     }
 8     
 9     public static void main(String[] args) {
10         Animal a = AnimalFactory.createAnimal("dog") ;
11         a.eat();
12         a = AnimalFactory.createAnimal("cat") ;
13         a.eat();
14     }
15 
16 }

 

优点:客户端不再负责对象的创建,从而明确了各个类的职责。

缺点:如果有新的产品类增加,要修改工厂类,不利于后期维护,违反了开闭原则。

 

 

2.工厂方法模式 Factory Method (创建型模式)

 

1 package Factory;
2 
3 public interface Animal {
4      public void eat();
5 }

 

 1 package Factory;
 2 
 3 public class Dog implements Animal {
 4 
 5     @Override
 6     public void eat() {
 7         System.out.println("狗吃肉");
 8 
 9     }
10 
11 }

 

 1 package Factory;
 2 
 3 public class Cat implements Animal {
 4 
 5     @Override
 6     public void eat() {
 7         System.out.println("猫吃鱼");
 8     }
 9 
10 }

 

1 package Factory;
2 
3 public interface Factory {
4     public Animal createAnimal();
5 }

 

 1 package Factory;
 2 
 3 public class CatFactory implements Factory {
 4 
 5     public CatFactory() {
 6         // TODO Auto-generated constructor stub
 7     }
 8 
 9     @Override
10     public Animal createAnimal() {
11         // TODO Auto-generated method stub
12         return new Cat();
13     }
14 
15 }

 

 1 package Factory;
 2 
 3 public class DogFactory implements Factory {
 4 
 5     public DogFactory() {
 6         // TODO Auto-generated constructor stub
 7     }
 8 
 9     @Override
10     public Animal createAnimal() {
11         
12         return new Dog();
13     }
14 
15 }

 

 1 package Factory;
 2 
 3 public class Test {
 4 
 5     public Test() {
 6         // TODO Auto-generated constructor stub
 7     }
 8     
 9     public static void main(String[] args) {
10         Factory f = new DogFactory() ;
11         Animal a = f.createAnimal();
12         a.eat();
13         
14         f = new CatFactory() ;
15         a = f.createAnimal() ;
16         a.eat();
17     }
18 
19 }

 

优点:如果有新的对象增加,只要增加一个具体的类和具体的工厂类即可,不影响原有的代码,提高了系统的维护性和可扩展性。

缺点:需要额外的代码。

 

设计模式(4)---工厂方法模式

标签:

原文地址:http://www.cnblogs.com/-Buff-/p/5731107.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!