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类 优点;在工厂方法法模式中,客户端不在负责对象的创建,并且,当有新的子类添加的时候,只需要添加一个子类和一个子类的工厂类即可。不需要 修改以前的结构,后期更容易维护,增强了系统的扩展性。 缺点:使用该模式需要额外的编写代码。增加了工作量。

  • 相关阅读:
    Tabindex
    bootStrap下拉菜单 点击下拉列表某个元素,列表不隐藏
    ionic--分模块
    ionic--配置路由
    ionic —指令
    一个简单的Makefile的编写【用自己的话,解释清楚这些】
    使用ptrace向已运行进程中注入.so并执行相关函数
    StrictMode模式介绍
    adb server is out of date. killing...
    交叉编译lsof for android
  • 原文地址:https://www.cnblogs.com/vinplezhang/p/3659859.html
Copyright © 2011-2022 走看看