设计模式之单一原则
admin
2023-08-02 05:20:08
0

定义

一个类只能负责一项工作

发生的问题

A负责不同的工作:工作W1,工作W2.当由于工作W1需要发生修改而需要修改类A时,有可能会导致原本进行正常的工作W2可能发生故障。

解决方法

   实行单一工作原则,分别建立两个类A1A2。这样让A1负责W1的功能,A2负责W2的功能。这样,修改A1就不会修改W2的功能了,同理 修改A2就不会修改W1的功能。

   

   说到单一工作原则,很多人不屑一顾,因为它原理太简单了。稍有经验的程序员没有学习过设计模式,没有听说单一工作原则,但是在实际开发过程中自觉就实行运用这一原则了,因为这是常识,因为在开发过程,谁都不希望因为修改一个类而导致其他功能发生故障。而避免这一现象的发生,采用单一工作原则是不错的选择。

    

设计模式之单一原则


运行结果:

    老人会说话!!

儿童会说话!!

青年会说话!!

 

 

程序运行后,发现问题了,并不是所有的生命都会说话,比如动物就不会说话,哑巴也不会说话。如果再细分的话,可以将living类分为normalpeopleanimaldumb

package text2;
 
public class design {
  public static void main(String[] args) {
living normal=new living();
normal.speak("儿童");
normal.speak("老人");
normal.speak("青年");
dump d=new dump();
d.speak("哑巴");
Animal a=new Animal();
    a.speak("小鸟");
  }   
}
class living{
public void speak(String who)
{
       System.out.println(who+"会说话!!");
}
}
class dump{
public void speak(String who)
{
System.out.println(who+"是不会说话的!");
}
}
class Animal{
public void speak(String who)
{
System.out.println(who+"不会说话的!");
}
}


运行结果

儿童会说话!!

老人会说话!!

青年会说话!!

哑巴是不会说话的!

小鸟不会说话的!

 

 

我们看到修改后的花销是大的,除了living类修改了,而且还增加了类,我们直接可以修改living,虽然违背了单一工作的原则,但是花销变小了.

 代码如下:

package text3;
 
public class design {
    public static void main(String[] args) {
    living l=new living();
    l.speak("老人");
    l.speak("儿童");
    l.speak("青年");
    l.speak("哑巴");
    l.speak("小鸟");
    }
 
}
class  living{
public void speak(String who)
{
if("老人".equals(who) || "儿童".equals(who) || "青年".equals(who)){
System.out.println(who+"会说话!!");
}else if("哑巴".equals(who)){
System.out.println(who+"不会说话!");
}else if("小鸟".equals(who)){
System.out.println(who+"不会说话!");
}
}
}


运行结果

老人会说话!!

儿童会说话!!

青年会说话!!

哑巴不会说话!

小鸟不会说话!

 

 

 

可以看到,这种修改方式要简单的多,但是存在隐患时:有一天需要将小鸟分类 麻雀 和 鹰 .则需要修改living类中speak方法啊.则对原有代码修改会对调用 老人,青年,儿童等相关功能带来风险.也许有一天代码量增多,运行结果 正常人中的老人不会说话了!! 这种修改时简单,但是违背了单一工作原则,到后来的隐患是大的.

package
 text4;


 

public class design {
    public static void main(String[] args) {
    Living l=new Living();
    l.speak("老人");
    l.speak("儿童");
    l.speak("青年");
    l.noSpeak("哑巴");
    l.noSpeak("小鸟");
    
}
}
class Living{
public void speak(String who)
{
System.out.println(who+"是会说话的");
}
public void noSpeak(String who)
{
System.out.println(who+"不会说话的");
}
}


 

运行结果

老人是会说话的

儿童是会说话的

青年是会说话的

哑巴不会说话的

小鸟不会说话的

 

 

 

可以看到,这种修改没有改动原来类中的方法,而是在类中新增加一个方法,这样虽然说违背了单一工作方式,但在方法级别上是符合单一工作原则的.因为它没有修改原来的方法的代码

这三种方法各有利弊,那么在实际的开发中,采取哪种方法呢 ?这个要根据实际的开发需求,

  只要逻辑简单,才可以代码级别上违背单一工作原则,只有类中的方法足够多,才可以在方法级别上违背单一工作原则

  单一工作原则的优点:

 

1 可以降低复杂度,一个类只负责一个功能,其逻辑肯定比负责多个功能简单的多.

2提高性的可读性,提高系统的可维护性.

3修改代码引起的风险降低.

 

需要说明的是 单一工作原则不只是面向对象编程中所特有的.只要是模块化程序设计,都适用于单一工作原则.

 






相关内容

热门资讯

唐驳虎丨SpaceX之后,长征... 作者丨唐驳虎核心提要1. 7月10日,长征十号乙遥一火箭从海南商业航天发射场升空,并成功完成一级海上...
格力电器取得一种列间空调专利,... 国家知识产权局信息显示,珠海格力电器股份有限公司取得一项名为“一种列间空调”的专利,授权公告号CN2...
时隔12年三星重启PC芯片业务... 7月10日消息,时隔12年,三星重新进入PC芯片赛道。据媒体报道,三星System LSI业务部正在...
台风来临前为何会晴热高温?权威... 台风好像总是和“狂风暴雨”联系在一起,但在台风“巴威”来临前,江浙沪为何仍晴热高温呢?江苏省气象台首...
沈阳本地滚筒式输送机定制覆盖哪... 工业输送设备定制的行业背景 现在国内制造业、流通业的智能化升级进程加快,据公开数据显示,2023年国...
商业航天3D打印需求爆发,A股... 7月10日,今年以来,国内主流3D打印服务商纷纷在商业航天展会上亮相,在火箭核心零部件制造领域进行“...
OpenAI最强AI模型:GP... OpenAI 公司今天(7月10日)发布公告,宣布在ChatGPT(聊天机器人)、Codex(主打编...
5G-A,重塑智慧文旅新生态 本报记者 窦瀚洋 游客乘坐电瓶船在浙江杭州西溪国家湿地公园观光。 杨 韬摄(人民视觉) 5G-A...
32岁程序员周末猝死后的200... 在广州视琨电子科技有限公司上班的32岁程序员高广辉于2025年11月29日(周六)猝死。猝死前一周工...
强台风“巴威”逼近台湾,蒋万安... 海峡导报综合报道 强台“巴威”持续逼近台湾,台北市长蒋万安9日晚表示,这次“巴威”台风是25年来暴风...