zoukankan      html  css  js  c++  java
  • 设计模式--工厂方法模式

    package cn.itcast_02;
    
    public abstract class Animal {
        
        public abstract void eat();
    
    }
    
    package cn.itcast_02;
    
    public interface AnimalFactory {
        public abstract Animal createAnimal();
    
    }
    
    package cn.itcast_02;
    
    public class Cat extends Animal {
    
        @Override
        public void eat() {
            // TODO Auto-generated method stub
            System.out.println("猫吃鱼");
    
        }
    
    }
    
    package cn.itcast_02;
    import cn.itcast_02.AnimalFactory;
    
    public class CatFactory implements AnimalFactory{
    
        @Override
        public Animal createAnimal() {
            return new Cat();
        }
        
    
    }
    
    package cn.itcast_02;
    
    public class Dog extends Animal {
    
        @Override
        public void eat() {
            // TODO Auto-generated method stub
            System.out.println("狗吃骨头");
        }
    
    }
    
    package cn.itcast_02;
    import cn.itcast_02.AnimalFactory;
    
    public class DogFactory implements AnimalFactory{
    
        @Override
        public  Animal createAnimal() {
            return new Dog();
        }
        
    
    }
    
    package cn.itcast_02;
    
    public class AnimalTest {
        public static void main(String[] args) {
            //使用猫的工厂
            AnimalFactory af=new CatFactory();
            Animal a=af.createAnimal();
            a.eat();
            
            //使用狗的工厂
            af=new DogFactory();
            a=af.createAnimal();
            a.eat();    
        }
    
    }

    场景   Animal    

                  动物吃的功能  

                  |--Cat   

                      |--CatFactory  

                  |--Dog   

                      |--DogFactory  

    这个时候,如果需要一个新的子类添加,怎么解决呢? 举例:添加了一个Pig类 优点;在工厂方法法模式中,客户端不在负责对象的创建,并且,当有新的子类添加的时候,只需要添加一个子类和一个子类的工厂类即可。不需要 修改以前的结构,后期更容易维护,增强了系统的扩展性。 缺点:使用该模式需要额外的编写代码。增加了工作量。

  • 相关阅读:
    发布在《30天自制操作系统》之前的操作捷径必读贴
    写在《30天自制操作系统》上市之前
    JS跨域代码片段
    C#简单操作XML
    Application Session Cookie ViewState Cache Hidden 区别
    C# string 特殊引用类型
    精通CSS高级Web标准解决方案:相对定位与绝对定位
    精通CSS高级Web标准解决方案:浮动
    精通CSS高级Web标准解决方案:背景图像基础
    char、varchar、nchar、nvarchar的区别
  • 原文地址:https://www.cnblogs.com/vinplezhang/p/3659859.html
Copyright © 2011-2022 走看看