java设计模式学习笔记--简单工厂模式

提出问题

从面向对象设计原则可以知道,我们应该面相接口编程。
看下面示例:

public interface People {
 public void walk();
 public void say();

public class Student implements People{
    @Override
    public void walk() {
        System.out.println("优雅地行走");
    }

    @Override
    public void say() {
        System.out.println("Hello");    
    }
}

public class InterfaceTest {
    public static void main(String[] args) {
        People stu = new Student();
        stu.say();
        stu.walk();
    }
}

上面写的没错,在java基础里面就是这么学的,但是仔细看看下面这句话:
People stu = new Student();
客户端调用的时候,客户端不但知道了接口,同时还知道了具体的实现就是Student;接口的思想是封装隔离,而实现类Student应该是被接口People封装并同客户隔离开的,也就是说客户端根本不应该具体的实现类是Student.


解决问题

对于上述问题,我们可以用简单工厂来解决。
简单工厂:提供一个创建对象实例的功能,而无需关心其实现。被创建实例的类型可以是接口,抽象类,也可以是具体的类。

简单工厂实例代码:

public class Factory {
    public static People getInstance(int type) {
        People people = null;

        switch(type) {
        case 1:
            people = new Student(); 
        }
        return people;
    }
}

//使用方式
public class FactoryTest {
    public static void main(String[] args) {
        People p = Factory.getInstance(1);
        p.walk();
        p.say();
    }
}

注意事项:
如果要防止客户端无谓的创造简单工厂实例,还可以吧简单工厂的构造方法私有化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值