在我参与的几个最近的项目中,我几乎沉迷于以下编码模式:( 我不确定是否有适当的名称,但无论如何......)
假设某个物体处于某种确定状态,我们不想从外部改变这种状态.这些更改可能意味着任何行为都可以调用任何算法,但事实是它们专注于更改某个对象的状态(成员状态,数据状态等).
让我们称之为改变这些对象的一种离散方式Mutator.Mutators应用一次(通常)并且它们有一些内部方法apply(Target& target, ...),它们会立即引起改变对象的状态(事实上,它们是某种功能对象).
它们也可以很容易地被同化为链并逐个应用(Mutator m1, m2, ...); 他们也可以从一些基本BasicMutator的virtual void apply(...)方法中得出.
我已经介绍了一些被调用的类InnerMutator,ExplicitMutator它们在访问方面有所不同 - 首先它们也可以改变对象的内部状态,并且应该被声明为friend(friend InnerMutator::access;).
在那些项目中,我的逻辑转向以下列方式工作:
object为某个确定的状态foreach (mutator) mutator.apply(object);现在的问题.
这个方案很好地工作, (对我来说)似乎是一些非标准但有用的设计模式的样本.
让我觉得不舒服的是那些
InnerMutator东西.我不认为将mutator声称为一个朋友对每个可以改变状态的对象都是一个好主意,我不想找到合适的选择.这种情况可以解决,
Mutators还是可以建议一些具有相同结果的替代模式?
谢谢.
我正在使用XMLSpy和SoapUI,并使用Web服务(ws)调用Fedex来生成标签.来自Fedex的回复是嵌入在Web服务响应中的PNG或PDF文件.如何保存PNG/PDF元素?
可能重复:
为什么#define同样有效时使用枚举?
在C语言编程时,最好使用#define语句或枚举用于状态机中的状态吗?
我知道命名控件的限制是254,除此之外你必须使用控件数组.但似乎我们也达到了阵列的极限.知道绝对限制是什么吗?
我试图找出TabActivity与此TabActivity中嵌入的子活动之间的最佳通信实践.
在我的TabActivity中,有一个按钮.单击该按钮时,我希望更新此TabActivity中嵌入的子活动.我编写了如下代码,只是想知道它是否是一个好习惯.谢谢.
MyTabActivity.java
public class MyTabActivity extends TabActivity implements OnClickListener {
private TabHost m_tabHost;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ff_tab_activity);
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
m_tabHost = getTabHost();
TabHost.TabSpec spec;
Intent intent;
intent = new Intent().setClass(this, ChildActivity.class);
spec = m_tabHost.newTabSpec("Tab 1");
spec.setContent(intent);
tabView = (TextView) inflater.inflate(R.layout.tab_indicator, null);
spec.setIndicator(tabView);
m_tabHost.addTab(spec);
m_tabHost.setCurrentTab(0);
ImageView nextButtonIv = (ImageView) findViewById(R.id.next_button);
nextButtonIv.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.next_button:
synchronized (ChildActivity.class) {
if (null != ChildActivity.s_childActivity) {
ChildActivity.s_childActivity.changeUI();
}
} …Run Code Online (Sandbox Code Playgroud) 在阅读了最优秀的"Head First Design Patterns"一书之后,我开始向同事们传播模式和设计原则的好处.在颂扬我最喜欢的模式的优点 - 策略模式 - 我被问到一个让我停顿的问题.当然,策略使用继承和组合,当我的同事问"为什么使用抽象基类而不是具体的类?"时,我在其中一个关于"程序到接口(或超类型)而不是实现"的长篇大论. .
我只能提出"你强迫你的子类实现抽象方法并阻止它们实例化ABC".但说实话,这个问题让我想起了gaurd.
我有以下数据,我需要把它全部放在一行.
我有这个:
22791
;
14336
;
22821
;
34653
;
21491
;
25522
;
33238
;
Run Code Online (Sandbox Code Playgroud)
我需要这个:
22791;14336;22821;34653;21491;25522;33238;
Run Code Online (Sandbox Code Playgroud)
这些命令中没有一个完美地运行.
他们中的大多数都让这样的数据:
22791
;14336
;22821
;34653
;21491
;25522
Run Code Online (Sandbox Code Playgroud) 究竟在Bar类中调用Foo.SomeCheck()时会发生什么?是否为了调用SomeCheck()而创建了一个Foo实例?如果是这样,这个实例是否存储在堆上,是否通过垃圾收集进行收集?
public class Foo() {
public static bool SomeCheck() {
return true;
}
}
public class Bar() {
public void SomeMethod() {
// what happens when we access Foo to call SomeCheck?
if (Foo.SomeCheck()) {
//do something
}
}
}
Run Code Online (Sandbox Code Playgroud) 所以我正在制作Pascal的三角形,我无法弄清楚为什么这段代码不起作用.它打印出这样的东西
[]
[1]
[1, 2]
[1, 3, 3]
[1, 4, 6, 4]
[1, 5, 10, 10, 5]
[1, 6, 15, 20, 15, 6]
[1, 7, 21, 35, 35, 21, 7]
[1, 8, 28, 56, 70, 56, 28, 8]
[1, 9, 36, 84, 126, 126, 84, 36, 9]
Run Code Online (Sandbox Code Playgroud)
这几乎是正确的,但它似乎值似乎是行数太高,所以1,2,如果算上2作为第一行和1为第0行,2为1个值太高,因为它是在第一行,应该是1,1.下一行应该是1,2,1,第一个值是正确的,但是下一个值是1个值太高而后一个值是2个值太高.
我尝试过像append(ai)这样的东西,但似乎不起作用,你怎么能正确打印呢?
def triangle(rows):
for rownum in range (rows):
newValue=1
PrintingList = list()
for iteration in range (rownum):
newValue = newValue * ( rownum-iteration ) * 1 / ( iteration + 1 ) …Run Code Online (Sandbox Code Playgroud) 假设我有一个包含母,父和子对象的数据存储区.在母亲和父亲的对象里面,我有一个名为child的字段,它存储了对孩子的引用.是否有可能从母亲和父亲那里引用这个孩子而不为每个孩子创建重复的子实例(以OOP的方式).这是数据库的工作方式吗?