设计模式---工厂模式,我的理解,总结

本文介绍了设计模式中的工厂模式,旨在理解其概念和重要性。通过逐步解析未使用、初步使用及优化后的工厂模式,强调了解耦和的重要性。文章通过实例展示了如何通过工厂模式提高代码的重用性和可扩展性,以及如何通过抽象工厂模式进一步增强代码的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,首先说,什么是设计模式?设计模式为什么会出现?它的出现是为了解决什么问题?

设计模式,design pattern,是一套被反复使用,多数人知晓的,代码设计经验的总结。
设计模式是为了1,提高代码重用性,2,提高代码可扩展性,3,代码更容易被他人所理解,提高代码可读性,保证代码可靠性。

代码引入设计模式的目的大概是以上3个目的, 如何实现这3个目的呢,方式就是,千方百计的降低代码耦合度来实现,引入设计模式也是为了降低代码耦合度从而实现那3个目的。

什么是耦合?怎么解耦和?

其实耦合就是系统内部各个部分之间关联度太高了,牵一发动全身。解耦和就是降低这各个部分之间的关联,解耦和的原则,其实就是设计模式的6大原则,如何解耦和?很简单,其实就是隔离变化,分离变化,将变化的部分单独隔离出来进行处理,这样就降低了各部分之间的关联度,因为已经将一个大部分拆成了很多小部分,

每一种设计模式的出现,都是为了解决现实开发中不断重复发生的问题而不断积淀产生的,可以说,任何一种设计模式,都完美的解决了一种不断重复出现的问题,或者说,是某一种问题的核心的解决方案,设计模式就想模板,使代码编程工程化,实现工厂中流水线一样的作业。

首先说说使用最广泛,最简单的工厂模式,

什么是工厂模式?从字面意思,似乎想到的是一个factory,进去的是原料,出来的是产品,这就是工厂,设计模式,当然是现实的高度抽取,但是又是来自于现实的情景,通过代码解释似乎更否和程序员的逼格。

工厂模式(Factory Method)

没对比就没有伤害,对比一下使用和没使用工厂模式的区别,然后再对工厂进行优化。

1,没有使用工厂模式的情形

interface Fruit{
       // 定义一个水果接口
    public void eat() ; // 吃水果
}
class Apple implements Fruit{
   
    public void eat(){
        System.out.println("** 吃苹果。") ;
    }
};
class Orange implements Fruit{
   
    public void eat(){
        System.out.println("** 吃橘子。") ;
    }
};
public class InterfaceCaseDemo03{
   
    public static void main(String args[]){
        Fruit f = new Apple() ; // 实例化接口
        f.eat() ;
    }
};

分析:

这里没有使用工厂,可以发现,代码并没有语法错误,但是设计的真的是糟糕透了,主方法相当于客户端,原则上来说,客户端的代码越少越好,客户端尽可能不要有大的频繁的改动。
然而子这里,可以发现,直接在主方法中指定了要操作的子类,客户端和子类实例紧紧的耦合在了一起,当我想扩展程序,当想要更换子类的时候,想更换一个Orange实例的时候,就肯定需要修改客户端,就必须得再客户端,把子类实例改为new Orangle();就很不合理。

解决:既然发现是耦合度太高,解决方案当然就是解耦和了,

进一步分析:

可以发现,其实问题就是处在这一句代码中Fruit f = new Apple() ;,就是这里存在变化,可能出现若干的不同类型的子类对象,使用父类对象接收子类实例,那么就可以从这个地方着手,隔离变化。

2,初步使用工厂

interface Fruit{
       // 定义一个水果接口
    public void eat() ; // 吃水果
}
class Apple implements Fruit{
   
    public void eat(){
        System.out.println("** 吃苹果。") ;
    }
};
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值