索引

意图

封装类的初始化数据,控制对类的属性的更改,并保持类数据与使用数据的方法间的隔离。

Encapsulate class data initialization, control write access to class attributes and separate data from methods that use it.

结构

参与者

MainClass

  • 根据构造函数参数列表构造 DataClass 类的实例。

DataClass

  • 封装数据。

适用性

当以下情况成立时可以使用 Private Class Data 模式:

  • 类的初始化数据是一次性的不可修改的数据。
  • 需要控制对类的初始化数据的更改。
  • 预防对初始化数据的不必要的更改。

效果

  • 减少类对外暴露的属性。
  • 从类中移除了对数据的写权限。

实现

实现方式(一):实现对初始化数据的封装。

 namespace PrivateClassDataPattern.Implementation1
{
public class CircleData
{
public CircleData(double radius, Color color, Point origin)
{
this.Radius = radius;
this.Color = color;
this.Origin = origin;
} public double Radius { get; private set; }
public Color Color { get; private set; }
public Point Origin { get; private set; }
} public class Circle
{
private CircleData _circleData; public Circle(double radius, Color color, Point origin)
{
_circleData = new CircleData(radius, color, origin);
} public double Circumference
{
get { return * Math.PI * _circleData.Radius; }
} public double Diameter
{
get { return * _circleData.Radius; }
} public void Draw(Graphics graphics)
{
}
}
}

设计模式之美》为 Dennis Gao 发布于博客园的系列文章,任何未经作者本人同意的人为或爬虫转载均为耍流氓。

设计模式之美:Private Class Data(私有类数据)的更多相关文章

  1. 设计模式之美:Object Pool(对象池)

    索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):实现 DatabaseConnectionPool 类. 实现方式(二):使用对象构造方法和预分配方式实现 ObjectPool ...

  2. 设计模式之美:Iterator(迭代器)

    索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Iterator 模式结构样式代码. 实现方式(二):实现 IEnumerable 中序遍历二叉树. 实现方式(三):实现 Bi ...

  3. 设计模式之美:Product Trader(操盘手)

    索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Product Trader 的示例实现. 意图 使客户程序可以通过命名抽象超类和给定规约来创建对象. Product Trad ...

  4. 设计模式之美:Dynamic Property(动态属性)

    索引 别名 意图 结构 参与者 适用性 效果 实现 实现方式(一):Dynamic Property 的示例实现. 别名 Property Properties Property List 意图 使对 ...

  5. 设计模式之美:Role Object(角色对象)

    索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Role Object 的示例实现. 意图 通过明确地附加角色对象到目标对象中,以使对象可以适配不同的客户需求.每个角色对象都代 ...

  6. 设计模式之美:Manager(管理器)

    索引 意图 结构 参与者 适用性 效果 实现 实现方式(一):Manager 模式的示例实现. 意图 将对一个类的所有对象的管理封装到一个单独的管理器类中. 这使得管理职责的变化独立于类本身,并且管理 ...

  7. 设计模式之美:Type Object(类型对象)

    索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Type Object 的经典介绍. 实现方式(二):Type Object 在游戏设计中的使用. 意图 允许在运行时动态灵活的 ...

  8. 设计模式之美:Extension Object(扩展对象)

    索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):使用示例结构实现 Extension Object. 实现方式(二):使用泛型实现 IExtensibleObject<T ...

  9. 设计模式之美:Visitor(访问者)

    索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Visitor 模式结构样式代码. 实现方式(二):使用 Visitor 模式解构设计. 实现方式(三):使用 Acyclic ...

随机推荐

  1. javascript学习面向对象(二)

    主要内容: prototype扩展应用示例: 对比如下: 数组中forEach用法示例: 从上面示例可以看出,forEach只适合遍历一维数组: 应用prototype扩展实现全部元素遍历如下: 简单 ...

  2. Test注解的两个属性(转)

    Test注解的两个属性:expected和timeout Junit的Test注解支持两个可选的参数expected和timeout.expected声明一个测试方法必须抛出一个异常.如果不抛出异常或 ...

  3. js动态生成二维码图片

    1.html代码 <div id="qrcode" style="width:200px; height:200px;position: fixed;bottom: ...

  4. C#之不借助第三变量交换两变量值

    源码: 1 2 3 4 5   int n1=10, n2=20;      n1 = n1 - n2;   // -10   n2 = n1 + n2;  //  10   n1 = n2 - n1 ...

  5. 什麼是 mvc

    非常多的Web框架都實踐一個叫做MVC的軟體架構設計模式,將軟體分成三個部分: Model物件包裝了資料與商業邏輯,例如操作資料庫 View表示使用者介面,顯示及編輯表單,可內嵌Ruby程式的HTML ...

  6. css3动画之图片旋转

    直接上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  7. PHP对redis操作详解【转】

    /*1.Connection*/ $redis = new Redis(); $redis->connect('127.0.0.1',6379,1);//短链接,本地host,端口为6379,超 ...

  8. 闲来无事——第一弹 Java基础 基本数据类型

    一个优秀的Java类一定要去优质的名称,类的命名主要有字母和数字,并且必须以字母开头:虽然说没有明确规定类名首字母要大写,但是实际上如果出现首字母小写的类名,那就呵呵了,坐等挨骂吧!类名首字母大写是业 ...

  9. jsp页面格式时间yy-mm-dd

    这个问题把我花了1小时都没弄出来  各种报错  还是最后同学告知才知道的. 导入  :<%@ taglib uri="http://java.sun.com/jsp/jstl/func ...

  10. 黑马程序员_Java基础:可变参数(Varagrs)的使用注意事项

    ------- android培训.java培训.期待与您交流! ---------- 因为在先前学习java的过程中,有涉及到可变参数,但没有太深入的去学习.所以最近自己找了些相关资料,想加深了解. ...