美文网首页
设计模式基础(二)

设计模式基础(二)

作者: Maxinxx | 来源:发表于2019-03-12 22:24 被阅读0次

简单工厂模式

思想:通过创建一个工厂类,专门创造对象,不需要在main函数里,自己创造对象了。

  • 概述:它定义一个具体的工厂类负责创建一些类的实例
  • 优点:客户端不需要负责对象的创建,从而明确了个各类的职责
  • 缺点:这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护。
public abstract class Animal {
    public abstract void eat();
}
public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("狗吃肉");
    }
}
public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}
public class AnimalFactory {
    //把构造私有,把成员方法变成静态,就可以通过类名直接调用,
    //不需要创造对象了
    private AnimalFactory() {}
    
    public static Dog createDog() {
        return new Dog();
    }
    
    public static Cat createCat() {
        return new Cat();
    }
    
}
public class AnimalDemo {
    public static void main(String[] args) {
        //具体类调用
        Dog d = new Dog();
        Cat c = new Cat();  
        d.eat();
        c.eat();
        System.out.println("-----------------------");
        
        //工厂有了后,通过工厂给造对象
        Dog dd = AnimalFactory.createDog();
        Cat cc = AnimalFactory.createCat();
        dd.eat();
        cc.eat();
        System.out.println("-----------------------");
    }
}

工厂改进后

public class AnimalFactory {
    //把构造私有,把成员方法变成静态,就可以通过类名直接调用,
    //不需要创造对象了
    private AnimalFactory() {}

    public static Animal creatAnimal(String type) {
        if("dog".equals(type)) {
            return new Dog();
        }else if("cat".equals(type)){
            return new Cat();
        }else {
            return null;
        }
    }
    
}
public class AnimalDemo {
    public static void main(String[] args) {
        //具体类调用
        Dog d = new Dog();
        Cat c = new Cat();  
        d.eat();
        c.eat();
        System.out.println("-----------------------");
        
        //工厂改进后
        Animal ddd = AnimalFactory.creatAnimal("dog");
        Cat ccc = (Cat) AnimalFactory.creatAnimal("cat");
        ddd.eat();
        ccc.eat();

        Animal a = AnimalFactory.creatAnimal("pig");
        if(a != null) {
            a.eat();
        }else {
            System.out.println("对不起,不提供这种动物");
        }
    }
}

相关文章

  • Android中的设计模式之策略模式

    参考 《设计模式:可复用面向对象软件的基础 》5.9 Strategy--对象行为型模式 《设计模式解析》(第二版...

  • 设计模式基础(二)

    简单工厂模式 思想:通过创建一个工厂类,专门创造对象,不需要在main函数里,自己创造对象了。 概述:它定义一个具...

  • 设计模式(一)设计模式基本概念

    设计模式基础 软件设计模式的概念 软件设计模式( Software Design Pattern ),又称设计模式...

  • php 工厂模式

    承接上篇php模式设计之 单例模式,(虽然好像关系不大)。今天讲述第二种基础的模式设计——工厂模式。 那么何为工厂...

  • 简说设计模式之策略模式

    前言:对于设计模式基础概念可以去看[简说设计模式之设计模式概述] 一、什么是策略模式 策略(Strategy)模式...

  • JavaScript 设计模式(上)——基础知识

    系列链接 JavaScript 设计模式(上)——基础知识 JavaScript 设计模式(中)——1.单例模式 ...

  • 23种常用设计模式

    基础知识 设计模式概述 从招式与内功谈起——设计模式概述(一):设计模式从何而来? 从招式与内功谈起——设计模式概...

  • 23种常用设计模式

    基础知识 设计模式概述 从招式与内功谈起——设计模式概述(一):设计模式从何而来? 从招式与内功谈起——设计模式概...

  • 23种常用设计模式

    基础知识 设计模式概述 从招式与内功谈起——设计模式概述(一):设计模式从何而来? 从招式与内功谈起——设计模式概...

  • 工厂模式

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)...

网友评论

      本文标题:设计模式基础(二)

      本文链接:https://www.haomeiwen.com/subject/mymopqtx.html