开闭原则:对扩展开放,对修改关闭。
对这句话的理解在含有对象的编程语言里,可认为是为自己的程序定义一个相对稳定的抽象层,同时将不同的实现行为一道具体的实现层完成。
在很多面向对象的编程语言都有接口和抽象的机制,可以通过他们为自己的程序设置一个抽象层,再通过具体的类来实现扩展。
如果需要对系统进行修改,不需要对抽象层进行修改,只需要增加新的具体类就可以实现新的业务。
实现不修改原来的功能基础之上实现新的功能的添加。
就好像是如下的图形模式
空口说起来比较抽象,我们依照示例来理解
2、示例假设我们有一个店铺 shop ,我们现在卖衣服 cloth,鞋子 shoes,但是我们不保证以后会不会再卖什么化妆品,毛绒玩具等。
我们想设计一个程序来统计我们每个类别获的 总价。
这个时候我们可以想到不能将程序写死,最好能够将每种产品进行分离,互不干扰,而且还能够有统一的接口。
那重要的一点就是 这个接口怎么写,怎么实现。
所谓接口,其实也就是找出他们共通的地方,设定一个规范。
此例中 统计总价 = 单价 * 数量
1)我们先设定一个 计算总价的接口
package myapplication.lum.com.openclose;public interface TotalPriceInterface { public voID setPrice(int price); public voID setNum(int num); public int getTotalPrice();}
2) 现在 我们要卖衣服,让衣服引用这个接口,
就可以完成对衣服的一个 单价 、数量 、总价的一个框架设计
package myapplication.lum.com.openclose;public class Clothes implements TotalPriceInterface{ private int price ; private int num; @OverrIDe public voID setPrice(int price) { this.price = price; } @OverrIDe public voID setNum(int num) { this.num = num; } @OverrIDe public int getTotalPrice() { return this.price * this.num; }}
3)同理 现在让 鞋子 引入这个接口
package myapplication.lum.com.openclose;public class Shoes implements TotalPriceInterface { private int price; private int num; @OverrIDe public voID setPrice(int price) { this.price = price; } @OverrIDe public voID setNum(int num) { this.num = num; } @OverrIDe public int getTotalPrice() { return this.price * this.num; }}
4) 我们在主程序中对 衣服、鞋子的总价 进行设置引用
package myapplication.lum.com.openclose;import androID.support.v7.app.AppCompatActivity;import androID.os.Bundle;import androID.util.Log;public class MainActivity extends AppCompatActivity { private String TAG = "TAG_"; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); Clothes clothes = new Clothes(); clothes.setPrice(200); clothes.setNum(100); Log.i(TAG,"clothes total price " + clothes.getTotalPrice()); Shoes shoes = new Shoes(); shoes.setPrice(300); shoes.setNum(200); Log.i(TAG,"shoes total price " + shoes.getTotalPrice()); }}
打印log :
package myapplication.lum.com.openclose;public class lipstick implements TotalPriceInterface { private int price; private int num; @OverrIDe public voID setPrice(int price) { this.price = price; } @OverrIDe public voID setNum(int num) { this.num = num; } @OverrIDe public int getTotalPrice() { return this.price * this.num; }}
在主程序引用:
lipstick lipstick = new lipstick(); lipstick.setPrice(500); lipstick.setNum(20); Log.i(TAG,"lipstick total price " + lipstick.getTotalPrice());
代码架构 如图;
开闭原则 大体就是 能够提炼出不同对象里面 相似的共通之处,对其进行抽象化,成为一个对接不同 *** 作对象的接口,从而使不同对象间相互独立。
总结以上是内存溢出为你收集整理的白话 Android 设计模式之开闭原则全部内容,希望文章能够帮你解决白话 Android 设计模式之开闭原则所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)