白话 Android 设计模式之开闭原则

白话 Android 设计模式之开闭原则,第1张

概述文章目录1、简介2、示例1、简介开闭原则:对扩展开放,对修改关闭。对这句话的理解在含有对象的编程语言里,可认为是为自己的程序定义一个相对稳定的抽象层,同时将不同的实现行为一道具体的实现层完成。在很多面向对象的编程语言都有接口和抽象的机制,可以通过他们为自己的程序

文章目录1、简介2、示例

1、简介

开闭原则:对扩展开放,对修改关闭。
对这句话的理解在含有对象的编程语言里,可认为是为自己的程序定义一个相对稳定的抽象层,同时将不同的实现行为一道具体的实现层完成。
在很多面向对象的编程语言都有接口和抽象的机制,可以通过他们为自己的程序设置一个抽象层,再通过具体的类来实现扩展。
如果需要对系统进行修改,不需要对抽象层进行修改,只需要增加新的具体类就可以实现新的业务。
实现不修改原来的功能基础之上实现新的功能的添加。

就好像是如下的图形模式

空口说起来比较抽象,我们依照示例来理解

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 设计模式之开闭原则所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1063803.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存