Java设计模式之工厂模式

网上相关设计模式的文章确实有很多,自己也是根据这些技术大牛的总结在逐渐的学习,相关的技术文章写的确实不错,不过为了加深自己的理解,遂决定还是自己动手,学习的比较深刻一点。个人理解学习就是这样的,总是看着别人的东西,觉着很简单,等到自己实际操作的时候,就不是那么回事。我的前辈和我说过,计算机语言本身并不重要,学习他的目的就是为了解决实际生活中遇到的问题,刚开始并部明白这句话的真正含义,只是为了学习而学习,为了工作而工作。慢慢接触久了就发现,当自己处于不同的高度时,看待问题的角度也发生了变化。

 

1.普通工厂模式:

public interface Car {
    public abstract void getBrand();

}
public class Audi implements Car{
    public void getBrand() {
        System.out.println("brand is Audi");
    }
}
public class Benzi implements Car {
    @Override
    public void getBrand() {
        System.out.println("bradn is Benzi");
    }
}
public class Factory {
    private static final String AUDI = "audi";
    private static final String BENZI = "benzi";

    public Car getCar(String carType){
        if(AUDI.equals(carType)){
            return new Audi();
        }else if(BENZI.equals(carType)){
            return new Benzi();
        }else {
            return null;
        }
    }
}
public class main {
    public static void main(String[] args) {
        Factory factory = new Factory();
        Car audi = factory.getCar("audi");
        Car benzi = factory.getCar("benzi");
        benzi.getBrand();;
        audi.getBrand();
    }
}

应用场景:当需要创建多个类型的对象(例如:需要创建奥迪车,和奔驰车对象),并且这些对象有类似的功能(都拥有自己的品牌,即getBrand()方法),可以把这些对象进行抽象(奥迪车和奔驰车抽象成“Car”),当需要从工厂中获取指定类型的对象(获取奥迪车或者奔驰车对象),并执行对象的方法(getBrand()方法)。

LG:我想从汽车工厂中,获取奔驰车的对象,并且通过对象得到奔驰车的品牌是什么。

带着下面的几个问题我们在了解一下真正的使用目的

“工厂模式”顾名思义,在工厂之中生产对象,工厂中产生的对象在生产之后一定是具体的(非抽象的)

如何得到具体的对象实例?以上代码时通过传入的参数是:“audi”或者“benzi”来获取真正的汽车对象。

为什么我们要实现Car的接口?根据java设计模式的6种设计理念。

分别是:

1.开闭原则:对扩展开发,对修改关闭

2.依赖倒转原则:基于开闭原则,针对于接口编程,依赖于抽象,不依赖于具体

3.里氏代换原则:任何父类出现的方法子类一定出现

4.接口隔离原则:尽量实现多个接口,充分的解耦和

5.迪米特法则:也是最少知道原则,尽量减少多个类之间的互相调用关系,使得系统功能模块相对独立

6.合成复用原则:尽量使用合成/具体的方式,避免使用继承

以下摘抄:

Ø  开放-封闭原则:对扩展开放,对修改封闭,可以用新的类来解决问题

Ø  单一职责原则:设计目的单一的类。也就是降低程序的耦和程度

Ø  李氏替换原则:用子类去替代父类

Ø  依赖倒置原则:依赖于抽象,而不依赖于具体的实现;针对接口编程,不针对实现编程

Ø  接口隔离原则:使用多个接口总比使用单个接口要好

Ø  组合重用原则:尽量使用组合,而不是使用继承来达到重用的目的,因为继承是一种紧偶和

Ø  最少知道原则:一个对象应当对其他对象有尽可能少的了解,即信息隐蔽
 

在设计之初,我们可能想到两种车都有相同的方法(getBrand()方法),但是方法中的具体实现,是根据具体的对象类型决定的,所以我们将对象进行抽象,实现了Car的接口;

一下是个人对Java中接口的理解:

1.接口是一种规范

2.如果多个对象或方法需要进行抽象时,可以通过实现接口,此时接口的作用是把对象或者方法进行了纵向抽象

3.功能的横向扩展:通过实现接口,将类中的方法进行增强,这种横向扩展的理解比较强硬,起始横向扩展的理解和第一中“接口是一种规范”理解的角度不同,横向扩展在装饰设计模式和适配器模式中可以有相应的体现。

第一次写难免有些片面,和理解方面的不足,希望自己通过不断的学习和知识的积累,把更好的东西呈现出来

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值