标签: composition

java继承与组合(实现堆栈)

我试图在java中实现一个堆栈(使用列表接口:接口列表).

我想以两种不同的方式实现它:使用组合和继承.

对于继承,到目前为止我有:

 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 import java.util.ListIterator;

 public class StackInheritance implements List {
      //implement list methods
 }
Run Code Online (Sandbox Code Playgroud)

对于作文,我有:

 import java.util.List;

 public abstract class StackComposition implements List {
     // implement some standard methods
 }

 public class StackViaList extends StackComposition {
     // implement methods that have not been implemented in the abstract
     // class
 }
Run Code Online (Sandbox Code Playgroud)

我很困惑从哪里开始.我之前从未使用过接口,所以我是否应该使用List方法来"模仿"堆栈,例如使用Array或ArrayList?

另外,对于合成,我不明白应该在StackComposition中使用哪些方法以及应该在StackViaList中使用什么方法.在不完全理解接口以及继承和组合之间,我有点迷失.我似乎还不能"得到它"......

任何帮助将不胜感激,谢谢!

java inheritance stack list composition

3
推荐指数
1
解决办法
4755
查看次数

3
推荐指数
1
解决办法
123
查看次数

MEF:来自Type的GetExportedValue?

使用MEF我可以创建并加载这样的类型:

var view = Container.GetExportedValue<MyView>();
Run Code Online (Sandbox Code Playgroud)

现在我想做的是:

Type t = typeof(MyView);
var view = Container.GetExportedValue<t>();
Run Code Online (Sandbox Code Playgroud)

(当然,类型可能包含与MyView不同的内容).

使用泛型GetExportedValue <>是不可能的 - 有没有其他方法来实现这一点?

c# prism mef composition

3
推荐指数
1
解决办法
5720
查看次数

将元素的子元素添加到jQuery集而不离开链

是否有可能在不离开链的情况下将jQuery集中的元素子元素添加到集合中?

即,离开它应该是这样的:

var set = $('.some-elements');
set.add('*', set);
// or immediate ones only
set.add(set.children());
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来做任何这些,而无需创建临时set变量:

$('.some-elements').jqMagic("*");
Run Code Online (Sandbox Code Playgroud)

(当然可以为此编写一个"jqMagic"插件.我只想确定,jQuery核心中没有这个功能.)

jquery traversal add composition

3
推荐指数
1
解决办法
728
查看次数

与android.app.Activity的组合

智慧的源头"有效的Java第二"说"赞成组合而不是继承"(第16项).现在谈到Android活动时,很容易从一个扩展,但是你打破了封装,代码可能会在超类被修改时中断.我试着写作.以下是组件Activity的代码:

public class SimpleActivity extends Activity{
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView textview = new TextView(this);
        textview.setText("This is the Artists tab");
        setContentView(textview);
    }   
}
Run Code Online (Sandbox Code Playgroud)

这是作文.对于每个Activity的生命周期方法,我调用了forward方法.

public class ComposedActivity extends Activity {
    private SimpleActivity act;
    public ComposedActivity(){
        act = new SimpleActivity();
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        act.onCreate(savedInstanceState);
    }   
}
Run Code Online (Sandbox Code Playgroud)

但是应用程序不断崩溃:java.lang.NullPointerException.我究竟做错了什么 ?只是出于好奇而问.您建议在没有继承的情况下扩展活动?

inheritance android composition android-activity

3
推荐指数
1
解决办法
2234
查看次数

作文,我不太明白吗?

参考以下链接:

http://www.javaworld.com/javaworld/jw-11-1998/jw-11-techniques.html?page=2

代码重用的组合方法提供了比继承更强的封装,因为对后端类的更改不需要破坏任何仅依赖于前端类的代码.例如, 更改前一个示例中Fruit的peel()方法的返回类型不会强制更改Apple的界面,因此无需破坏Example2的代码.

当然如果你改变返回类型peel()(见下面的代码),这意味着getPeelCount()将无法再返回int?你不是必须改变界面,否则会得到编译器错误?

class Fruit {

    // Return int number of pieces of peel that
    // resulted from the peeling activity.
    public int peel() {

        System.out.println("Peeling is appealing.");
        return 1;
    }
}

class Apple {

    private Fruit fruit = new Fruit();

    public int peel() {
        return fruit.peel();
    }
}

class Example2 {

    public static void main(String[] args) {

        Apple apple = new Apple();
        int pieces = apple.peel();
    }
}
Run Code Online (Sandbox Code Playgroud)

oop composition

3
推荐指数
1
解决办法
214
查看次数

如何在组合中的运行时更改成员对象?

思考C++卷.1(P-33):

组合具有很大的灵活性.新类的成员对象通常是私有的,这使得使用该类的客户端程序员无法访问它们.这允许您在不干扰现有客户端代码的情况下更改这些成员.
您还可以在运行时更改成员对象,以动态更改程序的行为.接下来描述的继承没有这种灵活性,因为编译器必须对使用继承创建的类设置编译时限制.

我们如何在组合中的运行时更改成员对象?
写入类声明时是否包含对象?

class car
{
private:
engine obj;
}

所以,这里的类car包含类的对象engine.我们怎样才能在运行时改变它?

还是我错过了一些观点?

c++ oop composition

3
推荐指数
1
解决办法
788
查看次数

如何在Go中将可变参数从一个函数传递到另一个函数

我试图在Go中将可变参数从一个函数传递到另一个函数.基本上是这样的:

func CustomPrint(a ...interface{}) (int, error) {
    // ...
    // Do something else
    // ...

    return fmt.Print(a)
}
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,它a会像切片一样打印,而不是像参数列表一样.即

fmt.Print("a", "b", "c") // Prints "a b c"
CustomPrint("a", "b", "c") // Print "[a b c]"
Run Code Online (Sandbox Code Playgroud)

知道如何实现这个吗?

composition variadic-functions go

3
推荐指数
1
解决办法
262
查看次数

依赖倒置原则:试图理解

我正在学习设计模式和它周围的东西(特别是SOLIDDependency inversion原理),看起来我正在失去一些东西:

遵循DIP规则,我应该能够通过不在类(组合)中创建对象,而是将对象引用/指针发送到类构造函数(聚合)来使类不那么脆弱.但这意味着我必须在其他地方创建一个实例:因此,具有聚合的一个类越灵活,另一个类就越脆弱.

请解释一下我错在哪里.

c++ design-patterns composition aggregation dependency-inversion

3
推荐指数
1
解决办法
317
查看次数

Monads,组成和计算顺序

所有monad文章经常陈述,monad允许你按顺序排列效果.

但是简单的构图怎么样?是不是

f x = x + 1
g x = x * 2

result = f g x
Run Code Online (Sandbox Code Playgroud)

需要g x先计算f ...

单子会做同样的事情,但处理效果?

monads haskell composition

3
推荐指数
2
解决办法
382
查看次数